SQL Server比较Date和Datetime数据时一个有趣的问题
看到有人贴出这样的问题:http://www.cnblogs.com/zc_0101/archive/2011/12/09/2282307.html
感觉SQL Server在比较Date和Datetime这两种类型的时候,是将Date类型强制转换成了'2011-11-04 00:00:00.000'的Datetime进行比较,因此Date类型的'2011-11-04'和Date类型的'2011-11-04 23:59:59'一样大,但是Date类型的'2011-11-04'比Datetime类型的'2011-11-04 23:59:59'小
验证代码如下:
DECLARE @EndTime datetime
SET @EndTime='2011-11-04 23:59:59'
--SET @EndTime='2011-11-05'
DECLARE @CreateTime DATE
SET @CreateTime='2011-11-04'
IF @CreateTime<@EndTime
PRINT '@CreateTime<@EndTime'
IF @CreateTime<CONVERT(DATE,@EndTime)
PRINT '@CreateTime<CONVERT(DATE,@EndTime)'
ELSE IF @CreateTime=CONVERT(DATE,@EndTime)
PRINT '@CreateTime=CONVERT(DATE,@EndTime)'
个人觉得取时间段还是避免使用'2011-11-04 23:59:59'这样的时间,毕竟数据的时间还存在位于'2011-11-04 23:59:59.001'和'2011-11-04 23:59:59.997'之间的可能性。另外,各系统间和输入输出参数的数据类型尽量都保持一致。