2017-03-18 86 views
1

我想知道哪个用户是晚上9点钟的时钟在晚上9点00分上午9点多宣布为晚,但我的结果显示我超过了10点00分只是算晚了在SQL中转换日期的时间

DECLARE @clockin as varchar 
DECLARE @clockout as varchar 
DECLARE @reportdate as datetime 

--SET @clockin = CONVERT(108,'08:30') 
SET @clockin = CONVERT(varchar(10),CAST('9:00' AS TIME),100) 
SET @clockout = CONVERT(varchar(10),CAST('18:30' AS TIME),100) 
SET @reportdate = month(GETDATE()) 

SELECT 
    u.showname AS showname, 
    l.USERID AS USERID, 
    u.BADGENUMBER AS BADGENUMBER, 
    l.CHECKTIME AS CHECKTIME, 
    CASE 
     WHEN DATEPART(HOUR, l.CHECKTIME) <= @clockin 
      THEN CONVERT(varchar(10), CAST(l.CHECKTIME AS TIME), 100) 
      ELSE 'late ' + CONVERT(varchar(100), CAST(l.CHECKTIME AS TIME), 100) 
    END AS Time 
FROM 
    CHECKINOUT l 
INNER JOIN 
    USERINFO u ON l.USERID = u.USERID 
WHERE 
    u.showname IS NOT NULL 
    AND u.BADGENUMBER > 100 
    AND CHECKTIME >= '1 jan 2017' 
    AND CHECKTIME <= '31 jan 2017' 
--GROUP BY l.USERID, u.showname, u.BADGENUMBER 
ORDER BY 
    u.BADGENUMBER 

结果

enter image description here

+0

哪个RDBMS是为了这个?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

回答

0

比较时间不只是'小时'!

DECLARE @clockin as TIME 
DECLARE @clockout as TIME 
DECLARE @reportdate as datetime 

SET @clockin = CAST('9:00' AS TIME) 
SET @clockout = CAST('18:30' AS TIME) 
SET @reportdate = month(GETDATE()) 

SELECT 
    u.showname, l.USERID, u.BADGENUMBER, l.CHECKTIME, 
    CASE 
     WHEN CAST(l.CHECKTIME AS TIME) < = @clockin 
      THEN CONVERT(VARCHAR(10), CAST(l.CHECKTIME AS TIME), 100) 
      ELSE 'late ' + CONVERT(VARCHAR(100), CAST(l.CHECKTIME AS TIME), 100) 
    END AS Time 
FROM 
    CHECKINOUT l 
INNER JOIN 
    USERINFO u ON l.USERID = u.USERID 
WHERE 
    u.showname IS NOT NULL 
    AND u.BADGENUMBER > 100 
    AND CHECKTIME >= '1 jan 2017' 
    AND CHECKTIME <= '31 jan 2017' 
ORDER BY 
    u.BADGENUMBER 
0

所有你需要做的就是删除了等号。该人抵达九点,所以他们不迟到,因为这等于开始时间。您也可以在办理入住手续时提前59秒退房,因此上午9点30分不会迟到。 我会建议使用一个单独的领域较晚标志,使人们可以更方便地在Excel或任何使用在其他报告中这样的数据:如果人是晚多少,他们是迟到的东西一样

Select 
    u.showname, l.USERID, u.BADGENUMBER, l.CHECKTIME, 
    case 
     when datepart(HOUR,l.CHECKTIME) < @clockin