在 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
我想找出示例时钟中哪个用户在 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