[SQL] SQL 서버, 분 초 변환, 시간, 일
SQLSQL 서버, 분 초 변환, 시간, 일
나는 시간 (초) 최대 시스템을 나타내는 정수 값을 포함하는 데이터베이스 열이 있습니다. 난 정말 쿼리처럼 저를 보여줄 수 있어야하는 것 그 형식 일 (들) 시간 (들) 분 (들)하지만 난 확신을 수행하는 방법을 모르겠어요 읽을 수있는 쉬운 시간까지. 내가 찾은 예제의 많은하지만 결코 많이 선택 기능에서 사용하는 방법에 대한 예로서 매개 변수를 사용할 것으로 보인다.
나도 웹 사이트에 표시되는 내용과 동일하게 시간이 필요합니다. 나는 하나 개의 쿼리 이전하고 추가 일 제거 된 분했습니다. 캔 사람의 도움이 나를?
소스 데이터 :
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.내가 사용하는 경향이 :
내가 사용하는 경향이 :
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.당신이 원하는 출력에 따라 :
당신이 원하는 출력에 따라 :
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.당신은 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.이 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.
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)]
from https://stackoverflow.com/questions/19298405/sql-server-converting-seconds-to-minutes-hours-days by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 10 : BLOB 데이터에 채우기에 HEXTORAW 사용 (0) | 2020.07.14 |
---|---|
[SQL] 어떻게 테이블 변경하여 액세스의 진수 필드를 만들려면 어떻게해야합니까? (0) | 2020.07.14 |
[SQL] SQL에서 매개 변수 - 델파이 7 (0) | 2020.07.14 |
[SQL] 동적 SQL 쿼리에서 열을 선택 (0) | 2020.07.14 |
[SQL] GETDATE 지난 달 (0) | 2020.07.14 |