SQL에서 초를 인간이 읽을 수있는 시간으로 변환하는 방법은 무엇입니까?
문제
SQL-Database에서 I는 int로서 몇 초 안에 지속 시간 (두 날짜 사이의 뺄셈)을 얻습니다. 그러나 나는이 결과를 'HH : MM'또는 'DD : HH'와 같은 사람으로 읽을 수있는 형태로 형식화하고 싶습니다. SQL에서 가능하고 어떻게 이것을 알 수 있습니까?
해결책
SQL 2005에서는 다음을 사용할 수 있습니다.
select convert(varchar(8), dateadd(second, [SecondsColumn], 0), 108)
먼저 초를 1900-01-01 이후 날짜로 전환 한 다음 HH : MM : SS 부품을 가져옵니다.
열이 24 시간 이상인 경우 며칠을 원하고 해당 경우 시간을 원한다면 다음과 같은 작업을 수행합니다.
case when SecondsColumn> (24*60*60)
then
cast(datepart(day,datediff(dd, 0, dateadd(second, SecondsColumn, 0))) as varchar(4))
+ 'd' + convert(varchar(2), dateadd(second, SecondsColumn, 0), 108)
else
convert(varchar(8), dateadd(second, SecondsColumn, 0), 108)
end
다른 팁
모든 데이터베이스는 다르게 수행합니다. 나는 postgresql을 사용하고 그것을 좋아합니다.
select to_char(my_date - my_other_date, 'HH:MM:SS');
사용중인 데이터베이스의 설명서를 참조해야합니다.
몇 초가 있다고 가정합니다.
DECLARE @DurationSeconds INT
-- 25h 45m 14s
SET @DurationSeconds = (25 * 3600) + (45 * 60) + (14)
SELECT
@DurationSeconds,
@DurationSeconds / 3600 hours,
@DurationSeconds % 3600 / 60 minutes,
@DurationSeconds % (3600 / 60) seconds
나는 당신에게 그것을 멋지게 서식하는 임무를 맡길 것입니다. :-)
많은 DBMS에는 고유 한 사용자 정의 구문이 있지만 표준은 없습니다.
일반적으로 데이터베이스 근처의 어느 곳이 아닌 애플리케이션 프레젠테이션 계층에서 인간에서 읽을 수있는 서식을 수행하는 것이 좋습니다.
Oracle SQL에서 :
-- 86,400 seconds in a day
-- 3,600 seconds in an hour
-- 60 seconds in a minute
select duration, -- seconds
trunc((duration)/86400) || ':' || -- dd
trunc(mod(duration,86400)/3600) || ':' || -- hh
trunc(mod(mod(duration,86400),3600)/60) || ':' || -- mm
mod(mod(mod(duration,86400),3600),60) -- ss
as human_readable
from dual
;
제휴하지 않습니다 StackOverflow