Oracle SQL에서 기간 동안 초 값을 ISO 8601 형식으로 변환

숀 킨 나이 르

초 (음악 시간)를 유지하는 Oracle 데이터베이스 열을 기간 동안 ISO 8601 형식으로 변환하려고합니다. 그러나 성공하지 못한 채이를 수행하는 Oracle 프로 시저 또는 SQL 조각을 모든 곳에서 검색했습니다. 다른 언어로 된 예제는 있지만 Oracle SQL 또는 PL / SQL은 아닙니다.

다음은 ISO 표준대한 정보입니다 .

저는 Oracle 11g 데이터베이스에 있습니다.

알렉스 풀

Oracle에는 기간을 변환 할 수있는 간격 데이터 유형이 있지만 실제로 형식을 지정할 수는 없습니다. 가장 간단한 방법은 mod와 trunc를 사용하여 값을 전체 시간과 분, 남은 초로 나누는 것입니다.

일부 샘플 데이터 :

with t (duration) as (
  select 59 from dual
  union all select 60 from dual
  union all select 61 from dual
  union all select 3599 from dual
  union all select 3600 from dual
  union all select 86399 from dual
)
select duration,
  numtodsinterval(duration, 'SECOND') as interval_value,
  'PT'
    || case when trunc(duration/3600) > 0 then trunc(duration/3600) || 'H' end
    || case when trunc(duration/3600) > 0 or trunc(mod(duration, 3600)/60) > 0
        then trunc(mod(duration, 3600)/60) || 'M' end
    || trunc(mod(duration, 60)) || 'S' as iso_value
from t;

  DURATION INTERVAL_VAL ISO_VALUE  
---------- ------------ ------------
        59 0 0:0:59.0   PT59S       
        60 0 0:1:0.0    PT1M0S      
        61 0 0:1:1.0    PT1M1S      
      3599 0 0:59:59.0  PT59M59S    
      3600 0 1:0:0.0    PT1H0M0S    
     86399 0 23:59:59.0 PT23H59M59S 

지속 시간은 24 시간을 초과 할 수 없으며 전체 초만 원한다고 가정합니다. 필요한 경우 더 긴 기간과 더 높은 정밀도를 처리 할 수 ​​있습니다.

나는 또한 당신이 가장 높은 선택적 부분을 제외하고 싶다고 생각하고 있습니다. 그래서 당신은 0H를 보여주지 않을 것입니다. 그러나 시간을 표시 했으므로 0이더라도 분과 초를 표시하고 싶습니다. 그렇지 않은 경우 case 문을 조정 (또는 제거) 할 수 있습니다.

항상 세 부분을 모두 표시하려면 :

select duration,
  numtodsinterval(duration, 'SECOND') as interval_value,
  'PT' || trunc(duration/3600) || 'H'
    || trunc(mod(duration, 3600)/60) || 'M'
    || trunc(mod(duration, 60)) || 'S' as iso_value
from t;

  DURATION INTERVAL_VAL ISO_VALUE  
---------- ------------ ------------
        59 0 0:0:59.0   PT0H0M59S   
        60 0 0:1:0.0    PT0H1M0S    
        61 0 0:1:1.0    PT0H1M1S    
      3599 0 0:59:59.0  PT0H59M59S  
      3600 0 1:0:0.0    PT1H0M0S    
     86399 0 23:59:59.0 PT23H59M59S 

제로 부품을 표시하지 않으려면 :

select duration,
  numtodsinterval(duration, 'SECOND') as interval_value,
  'PT'
    || case when trunc(duration/3600) > 0 then trunc(duration/3600) || 'H' end
    || case when trunc(mod(duration, 3600)/60) > 0 then trunc(mod(duration, 3600)/60) || 'M' end
    || case when trunc(mod(duration, 60)) > 0 then trunc(mod(duration, 60)) || 'S' end
    as iso_value
from t;

  DURATION INTERVAL_VAL ISO_VALUE  
---------- ------------ ------------
        59 0 0:0:59.0   PT59S       
        60 0 0:1:0.0    PT1M        
        61 0 0:1:1.0    PT1M1S      
      3599 0 0:59:59.0  PT59M59S    
      3600 0 1:0:0.0    PT1H        
     86399 0 23:59:59.0 PT23H59M59S 

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

YouTube API 기간 (PT # M # S 형식의 ISO 8601 기간)을 초로 변환하는 방법

분류에서Dev

시간 날짜 형식, 시간을 ISO8601 형식으로 변환

분류에서Dev

어떻게 자바에서 ISO 8601 형식으로 UTC 날짜 - 시간을 변환하는?

분류에서Dev

ISO 8601 기간을 Lua에서 형식이 지정된 문자열로 어떻게 변환합니까?

분류에서Dev

현재 서버 시간을 ISO 8601로 변환

분류에서Dev

PHP를 사용하여 influxdb 시간 형식을 ISO8601 형식으로 변환

분류에서Dev

DateTime을 ISO 8601로 변환

분류에서Dev

어떻게 인간 [안드로이드 스튜디오]에 의해 문자열 읽기에 ISO 8601 시간을 변환하는?

분류에서Dev

그 밀리 초는 사라지지 않도록 어떻게 PHP에서 날짜 시간 형식으로 밀리 초에 ISO 날짜 시간을 변환하는?

분류에서Dev

ISO 8601 형식으로 파일에 저장된 유닉스 시간을 변환하고 바꿀 수 있습니까?

분류에서Dev

antd 4에서 초기 값을 동적 형식으로 설정

분류에서Dev

Rust에서 SystemTime을 ISO 8601로 어떻게 변환합니까?

분류에서Dev

ISO-8601 기간으로 40,000,000 초를 나타냄

분류에서Dev

Swift : ISO8601을 Unix Epoch로 변환

분류에서Dev

AMAZON.DURATION 슬롯 형의 ISO-8601 기간 값을 파싱

분류에서Dev

시간을 ISO로 각도 형식으로 변환

분류에서Dev

ISO 8601 기본 날짜 형식을 TDate로 변환 할 수있는 Delphi RTL 함수가 있습니까?

분류에서Dev

ISO-8601 날짜 시간의 문자열을 Java에서 초 수

분류에서Dev

변환 패턴을 지정 했음에도 불구하고 Iso8601DateFormatter로 기본 설정되는 log4net 날짜 형식

분류에서Dev

Ruby에서 dateTime.iso8601 값을 사람이 읽을 수있는 날짜로 변환

분류에서Dev

moment.js에서 시간 배열을 UTC에서 ISO 형식으로 변환 하시겠습니까?

분류에서Dev

Pandas 데이터 프레임에서 ISO-8601 객체를 DateTime 형식으로 어떻게 변환합니까?

분류에서Dev

Pandas 데이터 프레임에서 날짜를 ISO-8601 DateTime 형식으로 변환하는 방법

분류에서Dev

입력 된 시간을 24 시간 시계에서 초로, 다시 24 시간 형식으로 변환

분류에서Dev

PHP ISO 8601 형식 변환 문제

분류에서Dev

각 <attr> 제목을 ISO8601로 개별적으로 변환

분류에서Dev

SQL Server 시간-XML ISO8601 값

분류에서Dev

유닉스 시간 (초)에서 ISO-8601의 datetime까지

분류에서Dev

mongoDB 3.6에서 ISO 형식 날짜 시간을 날짜로 변환

Related 관련 기사

  1. 1

    YouTube API 기간 (PT # M # S 형식의 ISO 8601 기간)을 초로 변환하는 방법

  2. 2

    시간 날짜 형식, 시간을 ISO8601 형식으로 변환

  3. 3

    어떻게 자바에서 ISO 8601 형식으로 UTC 날짜 - 시간을 변환하는?

  4. 4

    ISO 8601 기간을 Lua에서 형식이 지정된 문자열로 어떻게 변환합니까?

  5. 5

    현재 서버 시간을 ISO 8601로 변환

  6. 6

    PHP를 사용하여 influxdb 시간 형식을 ISO8601 형식으로 변환

  7. 7

    DateTime을 ISO 8601로 변환

  8. 8

    어떻게 인간 [안드로이드 스튜디오]에 의해 문자열 읽기에 ISO 8601 시간을 변환하는?

  9. 9

    그 밀리 초는 사라지지 않도록 어떻게 PHP에서 날짜 시간 형식으로 밀리 초에 ISO 날짜 시간을 변환하는?

  10. 10

    ISO 8601 형식으로 파일에 저장된 유닉스 시간을 변환하고 바꿀 수 있습니까?

  11. 11

    antd 4에서 초기 값을 동적 형식으로 설정

  12. 12

    Rust에서 SystemTime을 ISO 8601로 어떻게 변환합니까?

  13. 13

    ISO-8601 기간으로 40,000,000 초를 나타냄

  14. 14

    Swift : ISO8601을 Unix Epoch로 변환

  15. 15

    AMAZON.DURATION 슬롯 형의 ISO-8601 기간 값을 파싱

  16. 16

    시간을 ISO로 각도 형식으로 변환

  17. 17

    ISO 8601 기본 날짜 형식을 TDate로 변환 할 수있는 Delphi RTL 함수가 있습니까?

  18. 18

    ISO-8601 날짜 시간의 문자열을 Java에서 초 수

  19. 19

    변환 패턴을 지정 했음에도 불구하고 Iso8601DateFormatter로 기본 설정되는 log4net 날짜 형식

  20. 20

    Ruby에서 dateTime.iso8601 값을 사람이 읽을 수있는 날짜로 변환

  21. 21

    moment.js에서 시간 배열을 UTC에서 ISO 형식으로 변환 하시겠습니까?

  22. 22

    Pandas 데이터 프레임에서 ISO-8601 객체를 DateTime 형식으로 어떻게 변환합니까?

  23. 23

    Pandas 데이터 프레임에서 날짜를 ISO-8601 DateTime 형식으로 변환하는 방법

  24. 24

    입력 된 시간을 24 시간 시계에서 초로, 다시 24 시간 형식으로 변환

  25. 25

    PHP ISO 8601 형식 변환 문제

  26. 26

    각 <attr> 제목을 ISO8601로 개별적으로 변환

  27. 27

    SQL Server 시간-XML ISO8601 값

  28. 28

    유닉스 시간 (초)에서 ISO-8601의 datetime까지

  29. 29

    mongoDB 3.6에서 ISO 형식 날짜 시간을 날짜로 변환

뜨겁다태그

보관