时间类型默认的时分秒
前几天被时间类型给郁闷了,我要做这样一个工作,取出某天到某天的记录,这些记录都有一个字段记录着是什么时候创建的,而且详细到了秒。例如:
Id CreateTime
1 2007-01-19 10:48:36
2 2007-01-19 23:35:36
3 2007-01-18 23:35:36
我要取出'2007-01-18'到'2007-01-19'的数据,其实这个需求并不难,所以当时直接就用Where CreateTime Between StartTime And EndTime,但是得到的结果却没有包含19号的数据,例如:
Select * From T_TimeTest Where [Time] Between '2007-1-18' And '2007-1-19'
得到的结果是:
3 2007-01-18 23:35:36.000
于是我又换成比较大小的方式,如:
Select * From T_TimeTest Where [Time] >= '2007-1-18' And [Time] <= '2007-1-19'
但结果一样,这样可以确定语句上应该没什么问题,问题在时间类型默认的时分秒上,做这样一个例子
Declare @Time DateTime
Set @Time = '2007-1-18'
Print @Time
输出结果是:
Jan 18 2007 12:00AM
看到结果,我突然有一个问题:12:00AM是中午还是凌晨,问问我的同事,他们告诉我:不要想这个问题,否则你会疯的。(看来他可能为此疯过)不过从上面的结果看12:00AM应该是凌晨。最后同事建议我用字符串比较大小来解决这个问题。如下
Select * From T_TimeTest Where Convert(varchar(10),[Time],120) >= '2007-01-18' And Convert(varchar(10),[Time],120) <= '2007-01-19'
结果如下:
1 2007-01-19 10:48:36.000
2 2007-01-19 23:35:36.000
3 2007-01-18 23:35:36.000
其中Convert(varchar(10),[Time],120)中的“120”是一个格式