时间类型默认的时分秒

      前几天被时间类型给郁闷了,我要做这样一个工作,取出某天到某天的记录,这些记录都有一个字段记录着是什么时候创建的,而且详细到了秒。例如:
 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”是一个格式

posted @ 2007-01-27 10:40  KiddLee  Views(802)  Comments(0Edit  收藏  举报