mysql里
HOUR(12:30:11)  =12
HOUR(-22:30:11) =22如何得到HOUR(-22:30:11)=-22  ?意思是用什么代替HOUR...

解决方案 »

  1.   

    -22:30:11是怎么来的,SQL没有这个概念
      

  2.   

    -HOUR(22:30:11)
    -cast(-HOUR(22:30:11) as int)
      

  3.   

    谢谢大家的回复
    回复  “-22:30:11是怎么来的,SQL没有这个概念”
    timediff('2008-08-08 12:00:00', '2008-08-08 08:00:00')= 2:00:00
    timediff('2008-08-08 12:00:00', '2008-08-08 22:00:00')= -10:00:00
      

  4.   


    对HOUR(*) *是个变量,有正数也有负数,直接通过HOUR(*),正的得正数,负和得数,而不是只给一个时间
    -cast(-HOUR(22:30:11) as int),不知能用否???
      

  5.   

    Mysql中,看它的功能了。MSSql中没有hour这个函数。
      

  6.   

    分割的话 对于正负就不用同样分了
    substring(22:30:11,1,3)=22:
    substring(-22:30:11,1,3)=-22结果也处理不了,因为得小时后还要对做对比处理 作为 WHERE 里的条件
      

  7.   

    用CASE WHEN 判断,如果有'-'就前面加一个'-'
      

  8.   


    select case when 条件='' then .. else .. end
      

  9.   

    把我来用的 SQL 语句贴上吧,大家会好理解一点"SELECT * FROM `表` WHERE 0< HOUR(timediff(NOW(), '字段')<8"就是求字段中(值为日期时间)与当前在8小时内的记录
    如果timediff()得到负数,再HOUR()得到正数,结果就不对了。
      

  10.   

    select datediff(hour,'2008-08-08 12:00:00', '2008-08-08 22:00:00')
      

  11.   

    你用的不是标准sql,不太清楚。不过不要过于拘泥于取出小时,
    加一个条件,让当前时间>=或<='字段'不行么
    之后再用程序费解
      

  12.   


    谢谢你了,因为我用有字段是时间型的 用
    “SELECT * 
    FROM T1 
    WHERE z1 < now( ) 
    AND (z1+INTERVAL 8 HOUR)> now( )” 就可以了