关于查询语句日期条件出现的怪问题? cast('2004-11-01 00:00:00' as datetime) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就结果来看,第一答案有问题:2004-11-03 00:00:00不该出现这个结果,请楼主确认一下,你select出的字段和条件中用的reportdate一样吗?如果不一样,出现下面的结果也属正常因为是字符串日期,所以不需要楼上的cast转换 条件里面写的这样and reportdate<='2004-11-02 23:59:30'不会出现2004-11-03 00:00:00的 我来回答你这是为什么:在SQLServer中对于日期格式有两种1.datetime2.smalldatetime对于datetime在SQLServer中的数据长度为8位,该类型数据通常用来表示长日期格式,而smalldatetime的数据长度为4位,通常用来表达短日期格式.而且对于这两种数据格式的转换SQLserver中有一定的规则具体规则是:对于一个datetime格式的日期2004-01-01 23:59:29 和 2004-01-02 23:59:30如果转换为smalldatetime格式,系统会将23:59:30(不包括30)直接舍去后面的小时分秒,如2004-01-01 23:59:29->2004-01-01而对于23:59:30(包括30)以后系统会进位如2004-01-02 23:59:30->2004-01-03这就是为什么.从你的问题来看你,你数据库中采用的是smalldatetmie的格式进行存储,而你用了datatime的格式进行查询,这也是有问题的,虽然SQL能执行,但是会有细微的区别,区别就在以上我所描述的.给分吧,楼主,我说得够仔细了. reportdate这个字段是8位的日期型吧 恩,知道问题所在了,就是peacedog所说的,我用的是smalldatetime就出现那种情况了,谢谢各位,结贴了! 请教一个难难的SQL,真是痛苦,折磨了我好久 SQL2000的包存储在哪个数据库里的? update是什么原理呢? 如何转换时间格式???急!!! 一个sql 修改的语句如何写? 请教:递归存储过程中游标的使用问题 关于邹建的分页存储过程一直不释放内存,导致内存一直增加的问题(请高手说明一下原因) 备份文件好多碎片怎么解决 怎么*.sql 导入数据库(里面是表) 数据库“自定义存储过程”超级难题,编写复杂计算 问一个比较复杂的存储过程问题 个位老大指点,急,在线等一个SQL语句
and reportdate<='2004-11-02 23:59:30'不会出现2004-11-03 00:00:00的
在SQLServer中对于日期格式有两种
1.datetime
2.smalldatetime
对于datetime在SQLServer中的数据长度为8位,该类型数据通常用来表示长日期格式,而smalldatetime的数据长度为4位,通常用来表达短日期格式.而且对于这两种数据格式的转换SQLserver中有一定的规则
具体规则是:
对于一个datetime格式的日期2004-01-01 23:59:29 和 2004-01-02 23:59:30如果转换为smalldatetime格式,系统会将23:59:30(不包括30)直接舍去后面的小时分秒,如2004-01-01 23:59:29->2004-01-01而对于23:59:30(包括30)以后系统会进位如2004-01-02 23:59:30->2004-01-03
这就是为什么.
从你的问题来看你,你数据库中采用的是smalldatetmie的格式进行存储,而你用了datatime的格式进行查询,这也是有问题的,虽然SQL能执行,但是会有细微的区别,区别就在以上我所描述的.
给分吧,楼主,我说得够仔细了.