找出 今天 登录的所有用户。。loginTabuid    loginTime    logouttime   ……我一般是将时间截取年月日 ,然后和表里面的字段接渠道年月日再比较如
where logintime = convert(char(10),createdate,111) 
请问有没有更好的方法呢???sql语句

解决方案 »

  1.   

    --这样用不到索引啊
    SELECT *
    FROM TB
    WHERE loginTime >= CONVERT(CHAR(10), GETDATE(), 120)
    AND loginTime < CONVERT(CHAR(10), GETDATE()+1, 120)
      

  2.   

    where convert(date,logintime)  between convert(date,getdate()) and convert(date,dateadd(dd,1,getdate())
      

  3.   

    select case when CONVERT(varchar(10),logintime,120)= CONVERT(varchar(10),logouttime,120) then '同一天' else '不同天' end 
    from tb
      

  4.   

    select * from loginTab where convert(varchar(10),LoginTime,120)=convert(varchar(10),getdate(),120)
      

  5.   

        SELECT *
    FROM TB
    WHERE loginTime >= CONVERT(DATETIME,CONVERT(CHAR(8),GETDATE(),112))
        AND loginTime < CONVERT(DATETIME,CONVERT(CHAR(8),GETDATE()+1,112))--算出当前天起始时间和结束时间
    DECLARE @dDayStart DATETIME;
    DECLARE @dDayEnd DATETIME; 
    SET @dDayStart=CONVERT(DATETIME,CONVERT(CHAR(8),GETDATE(),112));
    SET @dDayEnd=CONVERT(DATETIME,CONVERT(CHAR(8),GETDATE()+1,112));
     
     SELECT @dDayStart,@dDayEnd
     
      

  6.   

    select * from tbl where case when  logintime = convert(char(10),createdate,111) then ...(加其他语句) end 
      

  7.   

    感觉提供的函数还是有些麻烦。。想oracle里面直接to_date多好
      

  8.   

    where datediff(day,时间,getdate())=0  不建议合作函数,建议使用 时间 between xxx and xxx
      

  9.   

    强烈建议使用:select a.* from LoginTab a where a.LoginTime>=CONVERT(VARCHAR(10),GETDATE(),120) and a.LoginTime<CONVERT(VARCHAR(10),DateAdd(Day,1,GETDATE()),120)要避免在字段上使用函数运算。会降低性能。若LoginTime建有索引,则索引键会失效。
      

  10.   


    oracle 里面的to_date 也是经过一系列操作,性能而已,都一样。