SQL에서 초를 인간이 읽을 수있는 시간으로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/197096

  •  10-07-2019
  •  | 
  •  

문제

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
   ;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top