日期查询小问题,在线等!
SELECT * FROM tbSales WHERE SalesDate >='2005-2-27' and SalesDate<='2006-3-10'
竟然没有记录,但数据库在这时间段明明有记录的,SalesDate 我设为nchar类型,没有设为Datetime类型
请问SQL日期查询是如何比较时间大小的,时间字段一定要设为Datetime类型类型的吗?
我设为nchar类型,那查询又是如何比较大小的?谢谢!
问题点数:20、回复次数:8Top
1 楼qybao(阿宝)回复于 2006-03-10 08:49:12 得分 5
不一定非要Datetime类型的,如果你的数据库里确实存放了'2005-2-27'和'2006-3-10'的数据,那么应该没问题的,你看看你的数据库里对应的字段的值是否真和你的条件一致,有没有多余的空格之类的?Top
2 楼wanghaiyang123(狼神)回复于 2006-03-10 09:07:15 得分 3
如果不应用DATATIME类型,建议以YYYYMMDD这种格式来存储.
Top
3 楼ZOU_SEAFARER(颓废程序员^_^)回复于 2006-03-10 09:09:10 得分 3
如果是access数据库你应该这样写
SELECT * FROM tbSales WHERE SalesDate >=#2005-2-27# and SalesDate<=#2006-3-10#
其他的可以像你那样写,用'括起来时间Top
4 楼Arron007(隐侠)回复于 2006-03-10 09:10:09 得分 0
这么奇怪!
数据库里确实存放了'2005-2-27'和'2006-3-10'的数据
SELECT * FROM tbSales WHERE SalesDate >='2005-2-27' and SalesDate<='2006-3-10'
将'2006-3-10'中的日期部分改为单位数就得,如"9"但改为双位数以上就无数据了,晕!
到底怎么回事?请高手指点.
请问SQL日期查询是如何比较时间大小的?Top
5 楼wxrwan(无奈小飞不耻上问)回复于 2006-03-10 09:19:10 得分 3
日期格式用m-d-yyyy试试
SELECT * FROM tbSales WHERE SalesDate >=#2-27-2005# and SalesDate<=#3-10-2006#Top
6 楼of123()回复于 2006-03-10 09:28:28 得分 3
注意,字符串比较是逐个字符比大小的。所以,你所有的日期字符串都必须格式化:
'2005-2-27' -> '2005-02-27'
'2006-3-10' -> '2006-03-10'Top
7 楼zfl2k(风)回复于 2006-03-10 09:32:16 得分 3
用字符的话是一个一个字符的比较,你最好在保存时全部保存为yyyy-mm-dd,这样保证日期都为10个字符,比较就不会出错了。
比如:
'2005-2-27' < '2005-2-9'
'2005-2-27' > '2005-2-09'Top
8 楼Arron007(隐侠)回复于 2006-03-10 09:44:36 得分 0
明白,谢谢!Top




