【问题标题】:Convert date time in SQL在 SQL 中转换日期时间
【发布时间】:2017-03-18 04:15:28
【问题描述】:

我想找出哪个用户在上午 9:00 的示例时钟中比上午 9:00 迟到了,但我的结果显示超过上午 10:00 才算迟到

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

结果

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。

标签: sql-server datetime datepart


【解决方案1】:

要与时间进行比较,而不仅仅是“小时”!

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

【讨论】:

    【解决方案2】:

    您所要做的就是删除等号。该人九点到达,所以他们不会迟到,因为那等于开始时间。您还可以将签到时间减去 59 秒,这样上午 9:00:30 就不会显示为晚了。 我建议为迟到标志使用一个单独的字段,这样人们就可以在 Excel 或其他任何报告中更轻松地使用这些数据:如果这个人迟到了,那么他们迟到了多少

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2019-11-26
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多