现在由于业务需求设计一张表,表中字段有编号(Id)、开始时间(starttime)、结束时间(endtime),如下:Id starttime endtime
1 9:30 11:30
2 14:30 15:30
3 18:30 20:30
现在的问题是startiem字段和endtime字段,数据类型不好确定。因为在存储过程中需要用这张表判断系统时间是否在表中时间范围之类。这里就牵扯到时间计算的问题。例如:系统时间是2012-5-21 8:00,那么需要判断在2012-5-21 9:30 到 2012-5-21 11:30、2012-5-21 14:30 到 2012-5-21 15:30、2012-5-21 18:30 到 2012-5-21 20:30,这三个时间段之间。时间段相当于是系统日期加上starttime和endtime组成(2012-5-21 9:30),那么我这个starttime和endtime应该设置成什么数据类型方便计算呢??请高手解答。最好是用代码举个例子。
1 9:30 11:30
2 14:30 15:30
3 18:30 20:30
现在的问题是startiem字段和endtime字段,数据类型不好确定。因为在存储过程中需要用这张表判断系统时间是否在表中时间范围之类。这里就牵扯到时间计算的问题。例如:系统时间是2012-5-21 8:00,那么需要判断在2012-5-21 9:30 到 2012-5-21 11:30、2012-5-21 14:30 到 2012-5-21 15:30、2012-5-21 18:30 到 2012-5-21 20:30,这三个时间段之间。时间段相当于是系统日期加上starttime和endtime组成(2012-5-21 9:30),那么我这个starttime和endtime应该设置成什么数据类型方便计算呢??请高手解答。最好是用代码举个例子。
如果没有涉及到秒级别,建议使用smalldatetime 。
运算起来直接引用方便。另外,存储也可以适当节约。
例如:
'2012-5-21'和'09:30'组成'2012-5-21 09:30'
如果用了date 或者time字段,通常就分开比较了。
如果要日期时间一起比较。 LZ最好还是用datetime或smalldatetime类型。若已经分开
就用下面代码,转换即可 。DECLARE @i DATE
DECLARE @j TIME SET @i = '2012-05-21'
SET @j ='09:30'SELECT @i
SELECT @j
SELECT CONVERT(datetime,CONVERT(VARCHAR,@i)+' '+CONVERT(VARCHAR(8),@j))