日期:2014-05-17  浏览次数:20392 次

关于日期型的存储和比较
今天看到一个帖子 http://bbs.csdn.net/topics/390412805
我的问题不在怎么优化,还是在日期的比较,比如说
date betwwen '2012-01-01' and '2012-12-01'
注 这里的 date 为字符型
这样写是否真的会像我们想象的那样,会不会有出错的可能.就像EXCEL一样,有时候对数字的排序并不像我们预期的那样.

------解决方案--------------------
这种方式我用了很久,从来没出错过,唯一可能的是你日期写的不够标准,如2013-3-21和2013-12-21,如果这两个字符比较,反而是后面的小,所以你的日期要符合yyyy-mm-dd的格式,另外用isNull函数比较好

isNull(date,'') betwwen '2012-01-01' and '2012-12-01'
------解决方案--------------------
这样的话格式出错sql会检测不出来。
比大小的话是没有问题的
------解决方案--------------------
如果date是字符型,字符比较按位按ascii码比较,无论两个字符是什么都不会报错
(除非类型不同发生了隐式转换)
------解决方案--------------------
如果你都按120格式存储的.那就没事
------解决方案--------------------
引用:
引用:这样的话格式出错sql会检测不出来。
比大小的话是没有问题的

如果是'2012年01月' 和 '2012年11月' 这样的比较呢
SQL默认是按拼音排序还是按其它的?

字符型的对比你的存储格式的是年月日类型的
全部是2012-01-01 月份和日期都是两位位数
吧-替换成年月日也可以
但是混搭或者其他格式就难了。

------解决方案--------------------
日期列和需要between and的数据类型应该一致,否则可能因为Windows层面的日期格式、SQLServer的语言设置、数据类型的精度原因,导致缺失部分数据。