[SQL] 간격 TO_CHAR 포맷
SQL간격 TO_CHAR 포맷
다음 SQL 명령
select TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))) from table1
000000000 : 00 : 형식의 결과를 생성 03 : 01.954000.
가능 얻기 위해 TO_CHAR 함수의 특별한 형식을 입력하는 것입니다 형식의 결과 : 00 00 : 00 : 00.000?
해결법
-
==============================
1.나는 그것이 전혀 똑똑하지 않으며 당신이 찾고있는 특별한 형식 문자열이지만,이 대답은 출력의 길이가 고정되어 주어진 작업을 수행 실현 :
나는 그것이 전혀 똑똑하지 않으며 당신이 찾고있는 특별한 형식 문자열이지만,이 대답은 출력의 길이가 고정되어 주어진 작업을 수행 실현 :
SELECT SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 1, 1) || SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 9, 2) || ' ' || SUBSTR(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))), 12, 12) FROM table1;
그것은 또한 단지 truncs 소수 초 대신 반올림하지만 나는 그들이 어쨌든 모든 단지 0을있어 귀하의 예제에서 가정합니다.
이것은 더욱 당황,하지만 난 저항 할 수 없었다 :
SELECT SUBSTR(REPLACE(TO_CHAR(NVL(arg1 - arg2, TO_DSINTERVAL('0 00:00:00'))) , '0000000', '') , 1, 16) FROM table1;
-
==============================
2.적은 정밀도를 원하는 경우 결과를 캐스팅 수 :
적은 정밀도를 원하는 경우 결과를 캐스팅 수 :
SQL> SELECT TO_DSINTERVAL('10 10:00:00') t_interval FROM dual; T_INTERVAL ----------------------------------------------------------- +000000010 10:00:00.000000000 SQL> SELECT CAST(TO_DSINTERVAL('10 10:00:00') 2 AS INTERVAL DAY(2) TO SECOND(3)) t_interval 3 FROM dual; T_INTERVAL ----------------------------------------------------------- +10 10:00:00.000
OP 코멘트 다음 편집 : 오라클 문서 (11gr1)에서 :
당신이 수동으로 원하는 출력을 달성하기 위해 추출물을 사용해야 할 것 같다 :
SQL> SELECT to_char(extract(DAY FROM t_interval), 'fmS99999') || ' ' || 2 to_char(extract(HOUR FROM t_interval), 'fm00') || ':' || 3 to_char(extract(MINUTE FROM t_interval), 'fm00') || ':' || 4 to_char(extract(SECOND FROM t_interval), 'fm00.000') 5 FROM (SELECT TO_DSINTERVAL('10 01:02:55.895') t_interval FROM dual) 6 ; TO_CHAR(EXTRACT(DAYFROMT_INTER ------------------------------ +10 01:02:55.895
이것은 매우 우아한 아니지만 마이크로 정밀도를 처리 할 수있는 유일한 방법입니다 보인다.
-
==============================
3.TO_CHAR ()는 REGEXP_SUBSTR는 예컨대 옵션이 될 수 있도록 :( 고정 된 형식을 갖고있는 것 같아요 :
TO_CHAR ()는 REGEXP_SUBSTR는 예컨대 옵션이 될 수 있도록 :( 고정 된 형식을 갖고있는 것 같아요 :
SELECT regexp_substr (TO_DSINTERVAL ('10 10:00:00'), '\d{2} \d{2}:\d{2}:\d{2}\.\d{3}') t_interval FROM dual
-
==============================
4.간격을 포맷하는 방법을 검색하는 동안 나는 그것이 가치가이 댓글을 추가하는 줄 알았는데, 그래서 스레드 강령술의 약간의 경우는, 그러나 나는이 질문을 가로 질러왔다.
간격을 포맷하는 방법을 검색하는 동안 나는 그것이 가치가이 댓글을 추가하는 줄 알았는데, 그래서 스레드 강령술의 약간의 경우는, 그러나 나는이 질문을 가로 질러왔다.
당신이 다음 날짜에 대한 표준 TO_CHAR 형식 요소를 사용할 수 있습니다 제로 시간 요소와 일정한 타임 스탬프를 추가하여 그래서, 타임 스탬프에 간격 결과에 타임 스탬프를 추가 오라클 문서에서 ...
SELECT TO_CHAR( TIMESTAMP'1969-12-31 00:00:00' + TO_DSINTERVAL('0 00:03:01.954321'), 'HH24:MI:SS.FF3' ) FROM dual;
그러나 간격으로 하루 이상이되는 경우에 문제가있다. 수득 것 일 대한 포맷 요소는 없다 0 "DDD"이 간격은 다음 날 컸다 그래서 만약 위의 예에서, 1 이상의 365 것, 해의 일이다. 이것은 한 당신의 간격이 24 시간 미만 그러나이 같은 괜찮습니다.
이를 추가해야하는 것은 물론 영업 이익에 적용 할 수 없을 수 있습니다 그래서는 11g에 있습니다.
-
==============================
5.
SELECT W.SHIFT_NUMB || ' c: ' || TO_CHAR(TO_DATE('01.01.2012', 'dd.mm.yyyy') + W.TIMEFROM, 'HH24:MI') || ' по: ' || TO_CHAR(TO_DATE('01.01.2012', 'dd.mm.yyyy') + W.TIMETO, 'HH24:MI'), w.ID FROM AC_WORK_SHIFT W WHERE W.CLIENT_ID = GC
( ': MI HH24') 그냥 날짜와 사용 TO_CHAR를 추가!
-
==============================
6.당신은 정규 표현식과 마지막 부분 (또는 일부)를 빼내야 수 있습니다 오라클 REGEXP_REPLACE 그냥 않습니다.
당신은 정규 표현식과 마지막 부분 (또는 일부)를 빼내야 수 있습니다 오라클 REGEXP_REPLACE 그냥 않습니다.
표 1에서 - ( '.. *'ARG2, TO_DSINTERVAL (0 0시 0분 0초 '))) TO_CHAR (NVL (ARG1)를 선택 REGEXP_REPLACE
from https://stackoverflow.com/questions/970249/format-interval-with-to-char by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 예상하고 오라클에서 작은 따옴표 '를 탈출하는 방법 (0) | 2020.04.27 |
---|---|
[SQL] 시간대 저장 데이터 유형에서 "시간대와 타임 스탬프" (0) | 2020.04.27 |
[SQL] 매개 변수 쿼리를 실행 (0) | 2020.04.27 |
[SQL] 왜 ISNUMERIC ( '는.') 1을 반환합니까? (0) | 2020.04.27 |
[SQL] SQL에서는 여러 가능한 메뉴 선택을 통해 선택하는 성명을 준비? (0) | 2020.04.27 |