现在由于业务需求设计一张表,表中字段有编号(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.   


    如果没有涉及到秒级别,建议使用smalldatetime 。
    运算起来直接引用方便。另外,存储也可以适当节约。
      

  2.   

    2008 R2 引用了时间字段,time类型, LZ也可以参考。
      

  3.   

    提供三个时间类型:datetiem(yy-mm-dd hh:mm:ss.sss),smalldatetime(yy-mm-dd hh:mm:ss),time(hh:mm:ss)
      

  4.   

    我知道可以用time类型,但是是怎么计算日期+时间
    例如:
    '2012-5-21'和'09:30'组成'2012-5-21 09:30'
      

  5.   


    如果用了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))
      

  6.   

    为什么你这句需要加个空格啊?SELECT CONVERT(datetime,CONVERT(VARCHAR,@i)+' '+CONVERT(VARCHAR(8),@j))不加就报错。
      

  7.   

    设置成datetime比较好,后期可以根据楼主具体需要使用各种函数进行进一步的计算或转换。