2016-08-15 2 views
1

У меня есть этот запросDATEPART результат формат, время

SELECT 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    (SELECT DATEPART(HOUR, OutTime)) - (SELECT DATEPART(HOUR, InTime)) as lebih 
FROM 
    DinasAuditHeader a 
INNER JOIN 
    DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
INNER JOIN 
    Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
INNER JOIN 
    employee d on c.Nip = d.Nip 
WHERE 
    b.Nip = '1502427' 
    AND c.AttendanceCode = 'P3' 
    AND a.KodeAuditHeader = 'AD0000001' 

Из запроса я получаю этот результат

Nip  FullName KodeDetailDinas KodeAuditHeader nip AttendanceDate claim_status InTime      OutTime   lebih 
1502427 FERNANDO ALIM  1   AD0000001 1502427 2016-08-28   0  2016-08-28 08:55:00.000 2016-08-28 21:03:00.000 13 
1502427 FERNANDO ALIM  3   AD0000001 1502427 2016-08-30   0  2016-08-30 08:55:00.000 2016-08-30 18:03:00.000 10 
1502427 FERNANDO ALIM  2   AD0000001 1502427 2016-08-29   0  2016-08-29 08:55:00.000 2016-08-29 19:03:00.000 11 
1502427 FERNANDO ALIM  4   AD0000001 1502427 2016-08-31   0  2016-08-31 08:50:00.000 2016-08-31 20:03:00.000 12 

Как вы можете видеть из моего запроса и результат. У меня есть столбец с lebih. lebih - диапазон результатов между InTime и OutTime.

У меня есть два вопроса (ы).

  1. Из моего запроса выше я могу получить только hour. Так как преобразовать его в этом формате hh:mm

  2. Как увидеть диапазон между ними (OutTime - InTime), а затем вычитать с - 08:00?

+0

что означает диапазон в betwen во время и outime вы можете поделиться некоторой информацией о том, как рассчитываются значение – TheGameiswar

+0

2016-08-28 21: 03: 00.000 - 2016-08-28 08:55: 00.000 Но только 'datetime part' – YVS1102

+0

i didn; t получить его, какая часть datetime, это минуты, ..? – TheGameiswar

ответ

1

Вы можете попробовать SELECT CONVERT(VARCHAR(5),(OutTime - InTime),108) AS lebih

Ниже Sql запрос должен работать в вашем случае:

SELECT 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    CONVERT(VARCHAR(5),(OutTime - InTime),108) AS lebih 
FROM 
    DinasAuditHeader a 
INNER JOIN 
    DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
INNER JOIN 
    Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
INNER JOIN 
    employee d on c.Nip = d.Nip 
WHERE 
    b.Nip = '1502427' 
    AND c.AttendanceCode = 'P3' 
    AND a.KodeAuditHeader = 'AD0000001' 

UPDATE:

Чтобы вычесть 8 часов из lebih, вы можете использовать

CONVERT(VARCHAR(5), DATEADD(HOUR, -8, OutTime - InTime), 108) AS lebih 
0

Как насчет простого броска к VARCHAR добавленным с помощью ':00'?

SELECT 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    cast((SELECT DATEPART(HOUR, OutTime)) - (SELECT DATEPART(HOUR, InTime)) AS VARCHAR(2)) + ':00' as lebih 
    FROM DinasAuditHeader a 
    inner join DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
    inner join Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
    inner join employee d on c.Nip = d.Nip 
where b.Nip = '1502427' and c.AttendanceCode = 'P3' and a.KodeAuditHeader = 'AD0000001' 

Если вы хотите, чтобы сделать его точным, чтобы MINUTE, лучше использовать DATEDIFF

select 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    cast(DATEDIFF(MINUTE, InTime, OutTime)/60) as varchar(2)) + ':' 
    + cast(DATEDIFF(MINUTE, InTime, OutTime) % 60) as varchar(2)) 
    FROM DinasAuditHeader a 
    inner join DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
    inner join Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
    inner join employee d on c.Nip = d.Nip 
where b.Nip = '1502427' and c.AttendanceCode = 'P3' and a.KodeAuditHeader = 'AD0000001' 

Если вы хотите еще минуту результат времени на 8 часов, вы можете поставить OutTime 8 часов назад первый.

select 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    cast(DATEDIFF(MINUTE, InTime, DATEADD(HOUR, -8, OutTime))/60) as varchar(2)) + ':' 
    + cast(DATEDIFF(MINUTE, InTime, DATEADD(HOUR, -8, OutTime)) % 60) as varchar(2)) 
    FROM DinasAuditHeader a 
    inner join DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
    inner join Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
    inner join employee d on c.Nip = d.Nip 
where b.Nip = '1502427' and c.AttendanceCode = 'P3' and a.KodeAuditHeader = 'AD0000001' 
+0

Как я могу это сделать 'lebih coloum' -' 08: 00'? – YVS1102

+0

@ YVS1102 жаль, что я не совсем понял. Вы хотите изменить время на 8 часов? – ydoow

+0

I meann выложите его на 8 часов – YVS1102

0

Используйте сценарий, чтобы получить разницу во времени в «ЧЧ: ММ».

SELECT 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, 
    LEFT(CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,InTime,OutTime),'2011-01-01 00:00') AS TIME),5) as lebih 
FROM DinasAuditHeader a 
INNER JOIN DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
INNER JOIN Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
INNER JOIN employee d on c.Nip = d.Nip 
WHERE b.Nip = '1502427' and c.AttendanceCode = 'P3' and a.KodeAuditHeader = 'AD0000001' 

См. Результат запроса образца. Time difference in HH:MM

+0

вы можете объяснить, что это за '2011-01-01 00: 00'? – YVS1102

+0

и могу ли я сделать математику внутри запроса? Например, значение 'lebih - 08:00 hour' – YVS1102

+0

- это просто трюк для преобразования результата в ожидаемый формат времени. Просто добавив дату (любую дату) со временем и вторым полем как 00:00 по отношению к результату датированная функция. Мы не можем явно преобразовать минутную разницу в тип данных времени. –

1

Для вопроса номер 1. U может использовать @Unnikrishnan R ответ. Затем для второго числа попробуйте выполнить запрос ниже. ?

SELECT 
    d.Nip,d.FullName,b.*,c.InTime,c.OutTime, LEFT(CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,InTime,OutTime),'2011-01-01 00:00') AS TIME),5) lebih , 
    LEFT(CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,InTime,DATEADD(HOUR, -8, OutTime)),'2011-01-01 00:00') AS TIME),5) 
FROM DinasAuditHeader a 
INNER JOIN DinasAuditDetail b on a.KodeAuditHeader = b.KodeAuditHeader 
INNER JOIN Attendance c on b.Nip = c.Nip and b.attendancedate = c.AttendanceDate 
INNER JOIN employee d on c.Nip = d.Nip 
WHERE b.Nip = '1502427' and c.AttendanceCode = 'P3' and a.KodeAuditHeader = 'AD0000001' 
order by KodeDetailDinas asc 
Смежные вопросы