2017-03-18 3 views
1

어떤 사용자가 늦은 시각에 시계를 사용하고 있는지 알고 싶습니다. 9:00 am에 오전 9:00 이상으로 늦게 선언 하겠지만 내 결과는 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

당신이 동일한 기호를 제거하기 만하면됩니다. 그 사람은 9시에 도착 했으므로 늦지 않았습니다. 시작 시간과 같기 때문입니다. 체크인 시간까지 59 초를 단축 할 수 있으므로 오전 9시 30 분은 늦게 표시되지 않습니다. 사람이 늦은 경우 그들이 얼마나 비교하려면 그

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