在 SQL 中转换日期时间

Convert date time in SQL

我想找出示例时钟中哪个用户在 9:00Am 上晚于 9:00am 声明为迟到但我的结果显示我超过 10:00Am算迟到

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

结果

您只需删除等号即可。这个人九点到达,所以他们没有迟到,因为那等于开始时间。您还可以将入住时间减去 59 秒,这样 9:00:30 am 就不会显示得那么晚。 我建议为迟到标志使用一个单独的字段,这样人们就可以在 excel 或其他任何地方更容易地在其他报告中使用这些数据:如果这个人迟到了,他们迟到的程度是多少

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

不仅要与时间比较'hour'!

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