2017-03-18 5 views
1

どの時計の時計が午前9時、午前9時より遅いのかを知りたいのですが、私の結果は10時より前に表示されます。日付時刻を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

ようなもので遅れている:私は、人々がより簡単にExcelでまたは任意の他のレポートでは、このデータを使用できるように遅延フラグのために別のフィールドを使用することをお勧めします 時間だけでなく、時間も!

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

あなたがしなければならないのは、等号を削除しています。その人は9時に到着したので、遅れていない。なぜなら、それは開始時刻に等しいからである。また、チェックイン時間に59秒を差し引くことができますので、午前9時30分は遅く表示されません。人が遅れた場合、どのくらい彼らは比較するためにその

Select 
    u.showname, l.USERID, u.BADGENUMBER, l.CHECKTIME, 
    case 
     when datepart(HOUR,l.CHECKTIME) < @clockin 
関連する問題