복붙노트

[SQL] SQL 서버, 분 초 변환, 시간, 일

SQL

SQL 서버, 분 초 변환, 시간, 일

나는 시간 (초) 최대 시스템을 나타내는 정수 값을 포함하는 데이터베이스 열이 있습니다. 난 정말 쿼리처럼 저를 보여줄 수 있어야하는 것 그 형식 일 (들) 시간 (들) 분 (들)하지만 난 확신을 수행하는 방법을 모르겠어요 읽을 수있는 쉬운 시간까지. 내가 찾은 예제의 많은하지만 결코 많이 선택 기능에서 사용하는 방법에 대한 예로서 매개 변수를 사용할 것으로 보인다.

나도 웹 사이트에 표시되는 내용과 동일하게 시간이 필요합니다. 나는 하나 개의 쿼리 이전하고 추가 일 제거 된 분했습니다. 캔 사람의 도움이 나를?

소스 데이터 :

PDT0014 6141
PDT0008 4990
PDT0024 840227
PDT0033 2301
PDT0035 5439
PDT0005 3434
PDT0019 5482

샘플 코드 :

SELECT tblAssets.AssetName, 
(case when tblAssets.Uptime> (24*60*60) 
        then 
            cast(datepart(day,datediff(dd, 0, dateadd(second, tblAssets.Uptime, 0))) as varchar(4))
        +   ' Day(s) ' + convert(varchar(2), dateadd(second, tblAssets.Uptime, 0), 108) +' Hour(s)' 
    else
            convert(varchar(5), dateadd(second, tblAssets.Uptime, 0), 108) + ' Hour(s) Minute(s) ' 
    end) AS Uptime
FROM tblAssets

원하는 쿼리 출력 :

PDT0014 01:42 Hour(s) Minute(s) 
PDT0008 01:23 Hour(s) Minute(s) 
PDT0024 10 Day(s) 17 Hour(s)
PDT0033 00:38 Hour(s) Minute(s) 
PDT0035 01:30 Hour(s) Minute(s) 
PDT0005 00:57 Hour(s) Minute(s) 
PDT0019 01:31 Hour(s) Minute(s)

해결법

  1. ==============================

    1.내가 사용하는 경향이 :

    내가 사용하는 경향이 :

    CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' +
        CONVERT(VARCHAR(5), DATEADD(SECOND, Seconds, '19000101'), 8)
    

    날짜에 초를 변환 한 후 SS : mm : 상단 부분은 바닥이 형식 HH에서 VARCHAR로 날짜를 변환하는 SQL-서버 변환을 사용, 정수로 일을 가져옵니다.

    EG

    SELECT  Formatted = CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' +
                            CONVERT(VARCHAR(5), DATEADD(SECOND, Seconds, '19000101'), 8),
            Seconds
    FROM    (   SELECT  TOP 10 
                        Seconds = (ROW_NUMBER() OVER (ORDER BY Object_ID) * 40000)
                FROM    sys.all_Objects
                ORDER BY Object_ID
            ) S
    

    SQL 바이올린에 예

    N.B. 변경 CONVERT (VARCHAR (5), DATEADD는 (.. 변환하는 (VARCHAR (8), DATEADD는 (.. 결과에 초를 유지

    편집하다

    당신은 가장 가까운 분에 라운드 초 필요성을하지 않으려면 대신 잘라 내기보다는 당신은 사용할 수 있습니다 :

    SELECT  Formatted = CAST(FLOOR(ROUND(Seconds / 60.0, 0) * 60 / 86400) AS VARCHAR(10))+'d ' +
                            CONVERT(VARCHAR(5), DATEADD(SECOND, ROUND(Seconds / 60.0, 0) * 60, '19000101'), 8),
            Seconds
    FROM    (   SELECT  Seconds = 3899
            ) S
    

    나는 단지와 열 초에 각 참조를 대체했다 :

    ROUND(Seconds / 60.0, 0) * 60
    

    그래서 초 반올림 변환을 수행하기 전에 가까운 분으로 가치

  2. ==============================

    2.당신이 원하는 출력에 따라 :

    당신이 원하는 출력에 따라 :

    DECLARE @s INT = 139905;
    
    SELECT                CONVERT(VARCHAR(12), @s /60/60/24) + ' Day(s), ' 
      +                   CONVERT(VARCHAR(12), @s /60/60 % 24) 
      + ':' + RIGHT('0' + CONVERT(VARCHAR(2),  @s /60 % 60), 2) 
      + ':' + RIGHT('0' + CONVERT(VARCHAR(2),  @s % 60), 2);
    

    결과:

    1 Day(s), 14:51:45
    

    또는:

    DECLARE @s INT = 139905;
    
    SELECT 
        CONVERT(VARCHAR(12), @s /60/60/24)   + ' Day(s), ' 
      + CONVERT(VARCHAR(12), @s /60/60 % 24) + ' Hour(s), '
      + CONVERT(VARCHAR(2),  @s /60 % 60)    + ' Minute(s), ' 
      + CONVERT(VARCHAR(2),  @s % 60)        + ' Second(s).';
    

    결과:

    1 Day(s), 14 Hour(s), 51 Minute(s), 45 Second(s).
    

    당신은 등 86400와 60/60/24를 대체 할 수 있지만 / 초 / 분 / 시간 계산에두면 나는 그것을 더 나은 그 자체로 문서를 찾을 수 있습니다. 당신이 테이블에 대해려고하는 경우 그리고, 단지 @s 대신에 COLUMN_NAME를 사용합니다.

  3. ==============================

    3.당신은 86400로 나누어 일 초를 변환 할 수 있습니다

    당신은 86400로 나누어 일 초를 변환 할 수 있습니다

    당신은 3600로 나누어 시간 초를 변환 할 수 있습니다,하지만 당신은 나머지를 얻을 필요 (총 일 오프 뺀 시간으로 변환)

    당신은 60로 나누어 분 초를 변환 할 수 있습니다,하지만 당신은 나머지를 얻을 필요 (총 시간 떨어져 빼서 분으로 변환)

    초 당신은,하지만 당신은 몇 초의 나머지 부분을보고 싶은 분 같은 단지 보고서 (전체 분 떨어져 sutracting에 의한 초로 변환) 할 수 있습니다

    SELECT      FLOOR( UpTime / 86400 ) AS DAYS
            ,   FLOOR( ( UpTime / 3600 ) - FLOOR( UpTime / 86400 ) * 24 ) AS HOURS
            ,   FLOOR( ( UpTime / 60 ) - FLOOR( UpTime / 3600 ) * 60 ) AS MINUTES
            ,   UpTime - FLOOR( UpTime / 60 ) * 60 AS SECONDS
    FROM        ( SELECT 269272 AS UpTime ) AS X
    

    269,272 3 일 (259,200초) 2 시간 (7천2백초) 47 분 (2천8백20초) 52 초이다.

    이 쿼리는 생산 :

    | DAYS | HOURS | MINUTES | SECONDS |
    ------------------------------------
    |    3 |     2 |      47 |      52 |
    

    생성한다 259,200, 125 (2 분 5 초)에 대입하면 :

    | DAYS | HOURS | MINUTES | SECONDS |
    ------------------------------------
    |    0 |     0 |       2 |       5 |
    

    캐릭터 라인 표현이 변환하려면, 당신은 SQL 서버 2012의 FORMAT 기능을 사용할 수 있습니다 :

    SELECT  CASE
                WHEN DAYS > 0 THEN
                    FORMAT( DAYS, '##' ) + ' Day(s) ' + FORMAT( HOURS, '##' ) + ' Hour(s)'
                ELSE
                    FORMAT( HOURS, '##' ) + ':' + FORMAT( MINUTES, '##' ) + ' Hour(s) Minute(s)'
            END AS UpTimeString
    FROM (
        SELECT      FLOOR( UpTime / 86400 ) AS DAYS
                ,   FLOOR( ( UpTime / 3600 ) - FLOOR( UpTime / 86400 ) * 24 ) AS HOURS
                ,   FLOOR( ( UpTime / 60 ) - FLOOR( UpTime / 3600 ) * 60 ) AS MINUTES
                ,   UpTime - FLOOR( UpTime / 60 ) * 60 AS SECONDS
        FROM        ( SELECT 125 AS UpTime ) AS X
    ) AS UptimeSubselect
    
  4. ==============================

    4.이 DATEPART ()를 사용하여 다른 접근 방법이다 :

    이 DATEPART ()를 사용하여 다른 접근 방법이다 :

    DECLARE @S INT = 86472,
            @START DATETIME = CONVERT(DATETIME,0)
    DECLARE @END DATETIME = DATEADD(SECOND,@S, @START)
    
    SELECT CONVERT(VARCHAR(10),DATEPART(DAY,@END)-1) + ' Day(s) ' +
           RIGHT(CONVERT(VARCHAR(10),100+DATEPART(HOUR, @END)),2) + ':' +
           RIGHT(CONVERT(VARCHAR(10),100+DATEPART(MINUTE, @END)),2) + ':' +
           RIGHT(CONVERT(VARCHAR(10),100+DATEPART(SECOND, @END)),2) 
    

    당신은 형식의 시간 부분에 필요하지 않은 경우 :

    SELECT CONVERT(VARCHAR(10),DATEPART(DAY,@END)-1) + ' Day(s) ' +
           CONVERT(VARCHAR(10),DATEPART(HOUR, @END)) + '  Hour(s)' +
           CONVERT(VARCHAR(10),DATEPART(MINUTE, @END)) + ' Minute(s)' +
           CONVERT(VARCHAR(10),DATEPART(SECOND, @END)) + ' Second(s)'
    
  5. ==============================

    5.

    DECLARE @Seconds INT = 86200;
    SELECT CONVERT(VARCHAR(15), 
    CAST(CONVERT(VARCHAR(12), @Seconds / 60 / 60 % 24)
    +':'+ CONVERT(VARCHAR(2), @Seconds / 60 % 60)
    +':'+ CONVERT(VARCHAR(2), @Seconds % 60) AS TIME), 100) AS [HH:MM:SS (AM/PM)]
    

  6. from https://stackoverflow.com/questions/19298405/sql-server-converting-seconds-to-minutes-hours-days by cc-by-sa and MIT license