佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1454|回复: 13

sql高手来看看。。。

[复制链接]
发表于 25-2-2008 02:18 AM | 显示全部楼层 |阅读模式
我有几个data field 叫 status,DateFrom, DateTo

当我做search时, 我有两个concept...
第一:我直接找status
第二:我要找status,DateFrom,DateTo, 这三个field 我都要match 起来。。。例如:status : Pending, DateFrom : 2/8/2008 DateTo: 2/25/2008(这三个都是database 里面的data)

当我在system打 status ending, DateFrom:2/8/2007, DateTo:2/25/2007

那两个date都不能找到data所以data not found嘛。。。

query要怎样写呢?

请各位高手大大帮帮忙~
回复

使用道具 举报


ADVERTISEMENT

发表于 25-2-2008 03:31 AM | 显示全部楼层
好像不是很难。。。你自己的 SQL 是怎么写。。。让大家看看为什么会出错。
回复

使用道具 举报

发表于 25-2-2008 09:12 AM | 显示全部楼层
原帖由 King86 于 25-2-2008 02:18 AM 发表
我有几个data field 叫 status,DateFrom, DateTo

当我做search时, 我有两个concept...
第一:我直接找status
第二:我要找status,DateFrom,DateTo, 这三个field 我都要match 起来。。。例如:status : Pendin ...



可以试一试这个
*******************
第一:SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING'
第二:SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' AND DATEFROM >= '2008/2/8' AND DATETO <= '2008/2/25'
回复

使用道具 举报

 楼主| 发表于 25-2-2008 06:44 PM | 显示全部楼层
原帖由 goatstudio 于 25-2-2008 03:31 AM 发表
好像不是很难。。。你自己的 SQL 是怎么写。。。让大家看看为什么会出错。


SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' OR
STATUS = 'PENDING' AND DATEFROM >= '2008/2/8' AND DATETO <= '2008/2/25'

我是酱写~
回复

使用道具 举报

发表于 25-2-2008 08:37 PM | 显示全部楼层
确认一下 TBLXYZ 有没有这些日期的 record?
回复

使用道具 举报

发表于 25-2-2008 10:05 PM | 显示全部楼层
如果你的data type 是datetime,最好filter by:
SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' AND DATEFROM >= '2008/2/8 00:00:00' AND DATETO <= '2008/2/25 23:59:59'
另外一个比较实用的方法:
SELECT *
FROM TBLXYZ
WHERE  STATUS = 'PENDING' AND CONVERT(DATETIME, DateFrom, 103) >='20080208' AND CONVERT(DATETIME, DateTo, 103) <='20080225'

[ 本帖最后由 lonelystar水瓶 于 25-2-2008 11:28 PM 编辑 ]
回复

使用道具 举报

Follow Us
 楼主| 发表于 26-2-2008 01:22 AM | 显示全部楼层
原帖由 lonelystar水瓶 于 25-2-2008 10:05 PM 发表
如果你的data type 是datetime,最好filter by:
SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' AND DATEFROM >= '2008/2/8 00:00:00' AND DATETO ='20080208' AND CONVERT(DATETIME, DateTo, 103)  



我会convert date, 只是那个query我搞不清楚~
回复

使用道具 举报

发表于 26-2-2008 02:11 AM | 显示全部楼层
试试看这样写:

SELECT * FROM TBLXYZ WHERE (STATUS = 'PENDING') OR
(STATUS = 'PENDING' AND DATEFROM >= '2008/2/8' AND DATETO <= '2008/2/25')

要确保你的资料库有相关的资料。

[ 本帖最后由 goatstudio 于 26-2-2008 02:12 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 26-2-2008 05:50 PM | 显示全部楼层
也是不能,当我search时打pending和date...它出pending而date它都不管是不是在那两个date的之间。。。
回复

使用道具 举报

发表于 27-2-2008 08:13 AM | 显示全部楼层
原帖由 King86 于 26-2-2008 05:50 PM 发表
也是不能,当我search时打pending和date...它出pending而date它都不管是不是在那两个date的之间。。。


试一试这个
*************

SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' OR
(DATEFROM BETWEEN '2008/2/8' AND '2008/2/25') AND
(DATETO BETWEEN '2008/2/8' AND '2008/2/25')

[ 本帖最后由 shinchanawang 于 27-2-2008 08:15 AM 编辑 ]
回复

使用道具 举报

发表于 28-2-2008 02:04 AM | 显示全部楼层
原帖由 King86 于 26-2-2008 05:50 PM 发表
也是不能,当我search时打pending和date...它出pending而date它都不管是不是在那两个date的之间。。。


那是因为 SQL 里有无日期皆可。既然是这样,我建议你在 code 里控制 sql.

有输入日期的时候,就用

SELECT * FROM TBLXYZ WHERE (STATUS = 'PENDING' AND DATEFROM >= '2008/2/8' AND DATETO <= '2008/2/25')

没有输入日期的话,就用

SELECT * FROM TBLXYZ WHERE (STATUS = 'PENDING')
回复

使用道具 举报

发表于 2-3-2008 11:38 PM | 显示全部楼层
原帖由 lonelystar水瓶 于 25-2-2008 10:05 PM 发表
如果你的data type 是datetime,最好filter by:
SELECT * FROM TBLXYZ WHERE STATUS = 'PENDING' AND DATEFROM >= '2008/2/8 00:00:00' AND DATETO ='20080208' AND CONVERT(DATETIME, DateTo, 103)  


CONVERT(DATETIME, DateTo, 103)
可以问下。。。。

那个103是做什么用的吗?
谢谢
回复

使用道具 举报

发表于 2-3-2008 11:40 PM | 显示全部楼层
知道了。。。谢谢
回复

使用道具 举报

发表于 15-3-2008 01:13 PM | 显示全部楼层
原帖由 小陈陈 于 2-3-2008 11:38 PM 发表


CONVERT(DATETIME, DateTo, 103)
可以问下。。。。

那个103是做什么用的吗?
谢谢


日期的style of date format
103是dd/mm/yy
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 1-1-2026 03:02 AM , Processed in 3.083659 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表