如何计算时间差问题在数据库里面,例如:
date1   varchar(25)     (date1数据为:"2006-03-01")
date2   varchar(25)     (date2数据为:"2006-04-05")
如何计算date1与date2的时间差,最后将时间差赋给 date0呢? (先将varchar类型转化为datetime类型的在计算?)
用游标计算呢?还是直接就能算出来呢?如果可能的话,计算到相差的时、分、秒,小弟再次谢谢大家了!

解决方案 »

  1.   

    --这样?
    Declare @date0 varchar(25)
    Declare @date1 varchar(25)
    Declare @date2 varchar(25)set @date1='2006-03-01'
    set @date2='2006-04-05'
    Select @date0=DATEDIFF(ss,@date1,@date2)
    Select @date0
      

  2.   

    --DateDiff的第一个参数
    year yy, yyyy 
    quarter qq, q 
    Month mm, m 
    dayofyear dy, y 
    Day dd, d 
    Week wk, ww 
    Hour hh 
    minute mi, n 
    second ss, s 
    millisecond ms 
      

  3.   

    不是这么简单的吧,那个是varchar类型的啊,你得转化成datetime类型的,然后才能计算呢啊,可以计算到相差得十分秒吗?谢谢了,最后显示为 3(小时)、20(分)、45(秒),这样的格式吗?谢谢!
      

  4.   


    declare @date1 varchar(25)
    declare @date2 varchar(25)
    set @date1='2006-03-01 17:30:20.00'
    set @date2='2006-04-05 19:20:50.00'
    select right(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),120),14)--02-05 01:50:30
      

  5.   

    日的相差不要?
    declare @date1 varchar(25)
    declare @date2 varchar(25)
    set @date1='2006-03-01 17:30:20.00'
    set @date2='2006-04-05 19:20:50.00'
    select stuff(stuff(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),108),3,1,'时'),6,1,'分')+'秒'--01时50分30秒
      

  6.   

    select right(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),120),14)
      这个可以给解释一下吗?小弟,很菜,不好意思了,right什么意思?为什么要用120,14呢?什么意思啊,嘿嘿,不好意思了!
      

  7.   

    select stuff(stuff(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),108),3,1,'时'),6,1,'分')+'秒'
    如果时间超过24小时,肯定要算一天的了啊,嗬嗬,这里的参数我怎么不懂呀,可以给解释一下吗?就是那个 108,6,1,什么意思呀,呵呵
      

  8.   

    120是convert的参数,表示形成yyyy-mm-dd hh:mm:ss 格式的字符串right(string,number)就是截取从字符串的右边数起第一个到第N个字符为止的字符串
      

  9.   

    基本上都是参数,你自己看联机的相关条目都有详细的说明
    108是convert用于获得hh:mm:ss格式字符串的参数
      

  10.   

    lz 你的担心是不必要的,因为varchar的,如果你的数据符合条件会自动进行数据转换
    还有最后的时间转换,date0返回的是一个varchar型的,如果lz需要可以自己进行处理就可以了
      

  11.   

    lz只需要像这样在查询分析器里执行一下就可以了解到思路:declare @date1 varchar(25)
    declare @date2 varchar(25)
    set @date1='2006-03-01 17:30:20.00'
    set @date2='2006-04-05 19:20:50.00'
    select stuff(stuff(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),108),3,1,'时'),6,1,'分')+'秒'select convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),108)select dateadd(s,datediff(s,@date1,@date2),0)select datediff(s,@date1,@date2)
      

  12.   

    有点问题,修正declare @date1 varchar(25)
    declare @date2 varchar(25)
    set @date1='2006-03-01 15:30:20.00'
    set @date2='2006-04-05 19:20:50.00'
    select rtrim(datediff(dd,(case when substring(@date1,11,25)>substring(@date2,11,25) then dateadd(day,1,@date1) else @date1 end),@date2))+'天'+stuff(stuff(convert(varchar,dateadd(s,datediff(s,@date1,@date2),0),108),3,1,'小时'),7,1,'分')+'秒'
    --35天03小时50分30秒