이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 8.5. 날짜/토토 꽁 머니 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

8.5. 토토 캔/시간 유형#

포스트그레SQL전체 세트 지원SQL토토 캔 및 시간 유형, 다음에 표시됨표 8.9. 이러한 데이터 유형에 사용할 수 있는 작업은 다음 항목에 설명되어 있습니다.PostgreSQL : 문서 : 개발 : 9.9. 날짜/스포츠 토토 기능 및 운영자. 토토 캔는 그레고리력이 도입되기 몇 년 전이라도 그레고리력에 따라 계산됩니다(참조무지개 토토 : 문서 : 개발 : B.6. 단위의 무지개 토토자세한 내용은).

표 8.9. 토토 캔/시간 유형

이름 저장소 크기 설명 낮은 값 높은 가치 해결
타임스탬프 [ (p) ] [ 시간대 없음 ] 8바이트 토토 캔 및 시간 모두(시간대 없음) 기원전 4713년 서기 294276년 1마이크로초
타임스탬프 [ (p) ] 시간대 포함 8바이트 토토 캔 및 시간 모두, 시간대 포함 기원전 4713년 서기 294276년 1마이크로초
토토 캔 4바이트 토토 캔(시간 없음) 기원전 4713년 5874897 서기 1일
시간 [ (p) ] [ 시간대 없음 ] 8바이트 시간(토토 캔 없음) 00:00:00 24:00:00 1마이크로초
시간 [ (p) ] 시간대 포함 12바이트 시간(토토 캔 없음), 시간대 포함 00:00:00+1559 24:00:00-1559 1마이크로초
간격 [필드 ] [ (p) ] 16바이트 시간 간격 -178000000년 178000000년 1마이크로초

참고

SQL 표준에서는 다음과 같이 작성해야 합니다.타임스탬프다음과 동등함시간대 없는 타임스탬프PostgreSQL그 행동을 존중합니다.timestamptz다음의 약어로 허용됩니다.시간대가 포함된 타임스탬프; 이것은PostgreSQL확장.

시간, 타임스탬프간격선택적 정밀도 값 허용p초 필드에 유지되는 소수 자릿수를 지정합니다. 기본적으로 정밀도에는 명시적인 제한이 없습니다. 허용되는 범위는p0부터 6까지입니다.

간격type에는 다음 문구 중 하나를 작성하여 저장된 필드 집합을 제한하는 추가 옵션이 있습니다.

연도
월
요일
HOUR
분
두 번째
매년
매일매일
하루에서 분까지
매일매일
시간에서 분까지
시간에서 초로
분에서 초까지

둘 다인 경우에 주의하세요필드그리고p지정되었습니다.필드반드시 포함두 번째, 정밀도는 초에만 적용되기 때문입니다.

유형시간대 포함 시간은(는) SQL 표준에 의해 정의되지만 이 정의는 유용성이 의심스러운 속성을 나타냅니다. 대부분의 경우 다음의 조합은토토 캔, 시간, 시간대가 없는 타임스탬프시간대가 포함된 타임스탬프모든 애플리케이션에 필요한 전체 토토 캔/시간 기능을 제공해야 합니다.

8.5.1. 토토 캔/시간 입력#

토토 캔 및 시간 입력은 ISO 8601을 포함한 거의 모든 합리적인 형식으로 허용됩니다.SQL-호환, 전통포스트그레스및 기타. 일부 형식의 경우 일, 월, 연도 토토 캔 입력 순서가 모호하며 이러한 필드의 예상 순서를 지정하는 기능이 지원됩니다. 설정토토 캔 스타일매개변수 ~MDY월-일-년 해석을 선택하려면,DMY일-월-년 해석을 선택하거나YMD연월일 해석을 선택합니다.

PostgreSQL는 토토 캔/시간 입력을 처리하는 데 있어보다 더 유연합니다.SQL표준이 필요합니다. 참조부록 B토토 캔/시간 입력의 정확한 구문 분석 규칙과 월, 요일 및 시간대를 포함한 인식된 텍스트 필드에 대한 정보입니다.

토토 캔 또는 시간 리터럴 입력은 텍스트 문자열과 같이 작은따옴표로 묶어야 한다는 점을 기억하십시오. 참조섹션 4.1.2.7더 많은 정보를 원하시면.SQL다음 구문이 필요합니다

유형 [ (p) ] ''

어디에서p은 초 필드에 소수 자릿수를 제공하는 선택적 정밀도 사양입니다. 정밀도는 다음과 같이 지정할 수 있습니다.시간, 타임스탬프간격유형이며 범위는 0에서 6까지입니다. 상수 사양에 정밀도가 지정되지 않은 경우 기본값은 리터럴 값의 정밀도입니다(6자리 이하).

8.5.1.1. 토토 캔#

표 8.10다음에 대한 몇 가지 가능한 입력을 보여줍니다.토토 캔유형.

표 8.10. 토토 캔 입력

설명
1999-01-08 ISO 8601; 1월 8일 모든 모드(권장 형식)
1999년 1월 8일 어떠한 경우에도 명확함토토 캔 스타일입력 모드
1/8/1999 1월 8일MDY모드; 8월 1일DMY모드
1/18/1999 1월 18일MDY모드; 다른 모드에서는 거부됨
01/02/03 2003년 1월 2일MDY모드; 2003년 2월 1일DMY모드; 2001년 2월 3일YMD모드
1999년 1월 8일 모든 모드에서 1월 8일
1999년 1월 8일 모든 모드에서 1월 8일
1999년 1월 8일 모든 모드에서 1월 8일
99년 1월 8일 1월 8일YMD모드, else 오류
99년 1월 8일 1월 8일, 오류 제외YMD모드
1월 08-99 1월 8일, 오류 제외YMD모드
19990108 ISO 8601; 1999년 1월 8일, 모든 모드에서
990108 ISO 8601; 1999년 1월 8일, 모든 모드에서
1999.008 연도 및 일
J2451187 율리우스 토토 캔
기원전 99년 1월 8일 기원전 99년

8.5.1.2. 타임즈#

시간 유형은 다음과 같습니다.시간 [ (p) ] 시간대 없음그리고시간 [ (p) ] 시간대 포함. 시간혼자서는 다음과 같습니다.시간대가 없는 시간.

이러한 유형에 대한 유효한 입력은 시간과 선택적 시간대로 구성됩니다. (참조표 8.11그리고표 8.12.) 시간대가 입력에 지정된 경우시간대가 없는 시간, 자동으로 무시됩니다. 토토 캔를 지정할 수도 있지만 일광 절약 시간제 규칙과 관련된 시간대 이름을 사용하는 경우를 제외하고는 무시됩니다.미국/New_York. 이 경우 표준 시간 또는 일광 절약 시간 적용 여부를 결정하려면 토토 캔를 지정해야 합니다. 적절한 시간대 오프셋은에 기록됩니다.시간대 포함 시간값이며 저장된 대로 출력됩니다. 활성 시간대에 맞춰 조정되지 않았습니다.

표 8.11. 시간 입력

설명
04:05:06.789 ISO 8601
04:05:06 ISO 8601
04:05 ISO 8601
040506 ISO 8601
오전 04:05 04:05와 동일; AM은 가치에 영향을 미치지 않습니다.
오후 4시 5분 16:05와 동일; 입력 시간은 <= 12여야 합니다.
04:05:06.789-8 ISO 8601, 시간대가 UTC 오프셋임
04:05:06-08:00 ISO 8601, 시간대가 UTC 오프셋임
04:05-08:00 ISO 8601, 시간대가 UTC 오프셋임
040506-08 ISO 8601, 시간대가 UTC 오프셋임
040506+0730 ISO 8601, UTC 오프셋으로 분수 시간 시간대 포함
040506+07:30:00 초 단위로 지정된 UTC 오프셋(ISO 8601에서는 허용되지 않음)
04:05:06 PST 약어로 지정된 시간대
2003-04-12 04:05:06 America/New_York 성명으로 지정된 시간대

표 8.12. 시간대 입력

설명
PST 약어(태평양 표준시)
미국/New_York 전체 시간대 이름
PST8PDT POSIX 스타일 시간대 지정
-8:00:00 PST에 대한 UTC 오프셋
-8:00 PST용 UTC 오프셋(ISO 8601 확장 형식)
-800 PST용 UTC 오프셋(ISO 8601 기본 형식)
-8 PST용 UTC 오프셋(ISO 8601 기본 형식)
줄루 UTC의 군사 약어
z 약식줄루(ISO 8601에도 있음)

참조섹션 8.5.3시간대 지정 방법에 대한 자세한 내용은.

8.5.1.3. 타임 스탬프#

타임스탬프 유형에 대한 유효한 입력은 토토 캔와 시간의 연결, 그 뒤에 선택적인 시간대, 그 뒤에 선택사항으로 구성됩니다.AD또는BC. (또는,AD/BC시간대 앞에 나타날 수 있지만 선호되는 순서는 아닙니다.) 따라서:

1999-01-08 04:05:06

그리고:

1999-01-08 04:05:06 -8:00

다음의 유효한 값입니다.ISO8601 표준. 또한 일반적인 형식은 다음과 같습니다.

1999년 1월 8일 04:05:06 PST

지원됩니다.

SQL표준 차별화시간대 없는 타임스탬프그리고시간대가 포함된 타임스탬프a의 존재에 의한 리터럴+또는-시간 이후의 기호 및 시간대 오프셋. 따라서 표준에 따르면,

타임스탬프 '2004-10-19 10:23:54'

시간대 없는 타임스탬프, 동안

타임스탬프 '2004-10-19 10:23:54+02'

시간대가 포함된 타임스탬프. PostgreSQL유형을 결정하기 전에 리터럴 문자열의 내용을 검사하지 않으므로 위의 두 가지를 모두 다음과 같이 처리합니다.시간대 없는 타임스탬프. 리터럴이 다음과 같이 처리되도록 하려면시간대가 포함된 타임스탬프, 올바른 명시적 유형을 지정하세요.

시간대 '2004-10-19 10:23:54+02'가 포함된 타임스탬프

다음으로 결정된 값에서시간대가 없는 타임스탬프, PostgreSQL모든 시간대 표시를 자동으로 무시합니다. 즉, 결과 값은 입력 문자열의 토토 캔/시간 필드에서 파생되며 시간대에 맞게 조정되지 않습니다.

시간대가 포함된 타임스탬프값, 명시적인 시간대를 포함하는 입력 문자열은 UTC(세계협정시) 해당 시간대에 적합한 오프셋을 사용합니다. 입력 문자열에 시간대가 명시되어 있지 않으면 시스템의 시간대에 지정된 것으로 간주됩니다.시간대매개변수이며,에 대한 오프셋을 사용하여 UTC로 변환됩니다.시간대구역. 두 경우 모두 값은 내부적으로 UTC로 저장되며 원래 명시되었거나 가정된 시간대는 유지되지 않습니다.

때 a시간대가 포함된 타임스탬프값이 출력되며 항상 UTC에서 현재로 변환됩니다.시간대존이며 해당 존의 현지 시간으로 표시됩니다. 다른 시간대의 시간을 보려면 다음 중 하나를 변경하세요.시간대또는 다음을 사용하세요시간대구조물(참조섹션 9.9.4).

전환 사이시간대가 없는 타임스탬프그리고시간대가 포함된 타임스탬프일반적으로 다음과 같이 가정합니다.시간대 없는 타임스탬프값은 다음과 같이 취하거나 주어져야 합니다.시간대현지 시간. 다음을 사용하여 변환을 위해 다른 시간대를 지정할 수 있습니다.시간대.

8.5.1.4. 특수 값#

포스트그레SQL다음과 같이 편의를 위해 여러 가지 특수 토토 캔/시간 입력 값을 지원합니다.표 8.13. 값무한대그리고-무한대특별히 시스템 내부에 표시되며 변경되지 않고 표시됩니다. 그러나 다른 것들은 읽을 때 일반적인 토토 캔/시간 값으로 변환되는 단순한 표기법 약어입니다. (특히,지금및 관련 문자열은 읽자마자 특정 시간 값으로 변환됩니다.) 이러한 값은 모두 SQL 명령에서 상수로 사용될 때 작은따옴표로 묶어야 합니다.

표 8.13. 특수 토토 캔/시간 입력

입력 문자열 유효한 유형 설명
에포크 토토 캔, 타임스탬프 1970-01-01 00:00:00+00 (Unix 시스템 시간 0)
무한대 토토 캔, 타임스탬프, 간격 다른 모든 타임스탬프보다 늦음
-무한대 토토 캔, 타임스탬프, 간격 다른 모든 타임스탬프보다 빠름
지금 토토 캔, 시간, 타임스탬프 현재 거래 시작 시간
오늘 토토 캔, 타임스탬프 자정(00:00) 오늘
내일 토토 캔, 타임스탬프 자정(00:00) 내일
어제 토토 캔, 타임스탬프 자정(00:00) 어제
모든 공 시간 00:00:00.00 UTC

다음SQL-호환 함수를 사용하여 해당 데이터 유형에 대한 현재 시간 값을 얻을 수도 있습니다.CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, 현지시간, LOCALTIMESTAMP. (참조섹션 9.9.5.) 이는 SQL 함수이며 다음과 같습니다.아님데이터 입력 문자열에서 인식됩니다.

주의

입력 문자열 동안지금, 오늘, 내일어제대화형 SQL 명령에 사용해도 괜찮습니다. 예를 들어 준비된 명령문, 뷰 및 함수 정의에서 나중에 실행하기 위해 명령을 저장할 때 놀라운 동작이 나타날 수 있습니다. 문자열은 오래 된 후에도 계속 사용되는 특정 시간 값으로 변환될 수 있습니다. 이러한 상황에서는 대신 SQL 함수 중 하나를 사용하십시오. 예를 들어,CURRENT_DATE + 1보다 안전합니다'내일'::토토 캔.

8.5.2. 토토 캔/시간 출력#

토토 캔/시간 유형의 출력 형식은 ISO 8601 네 가지 스타일 중 하나로 설정될 수 있습니다.SQL(Ingres), 전통포스트그레스(유닉스토토 캔형식) 또는 독일어. 기본값은ISO형식. (그SQL표준에서는 ISO 8601 형식을 사용해야 합니다. 의 이름SQL출력 형식은 역사적 사고입니다.)표 8.14각 출력 스타일의 예를 보여줍니다. 의 출력토토 캔그리고시간유형은 일반적으로 주어진 예에 따른 토토 캔 또는 시간 부분입니다. 그러나,포스트그레스style은 토토 캔 전용 값을 출력합니다.ISO형식.

표 8.14. 토토 캔/시간 출력 스타일

스타일 사양 설명
ISO ISO 8601, SQL 표준 1997-12-17 07:37:16-08
SQL 전통적인 스타일 1997년 12월 17일 07:37:16.00 PST
포스트그레스 원래 스타일 1997년 12월 17일 수요일 07:37:16 PST
독일어 지역 스타일 1997년 12월 17일 07:37:16.00 PST

참고

ISO 8601에서는 대문자 사용을 규정합니다.T토토 캔와 시간을 구분합니다.포스트그레SQL입력 시 해당 형식을 허용하지만 출력 시 공백을 사용합니다.T, 위에 표시된 대로입니다. 이는 가독성과 일관성을 위한 것입니다.RFC 3339다른 데이터베이스 시스템도 마찬가지입니다.

에서SQL및 POSTGRES 스타일에서는 DMY 필드 순서가 지정된 경우 일이 월 앞에 표시되고, 그렇지 않으면 월이 일 앞에 표시됩니다. (참조섹션 8.5.1이 설정이 입력 값 해석에 어떤 영향을 미치는지 알아보세요.)표 8.15예시를 보여줍니다.

표 8.15. 토토 캔 순서 규칙

토토 캔 스타일설정 입력 순서 출력 예
SQL, DMY // 1997년 17월 12일 15:37:16.00 CET
SQL, MDY // 1997년 12월 17일 07:37:16.00 PST
포스트그레스, DMY // 1997년 12월 17일 수요일 07:37:16 PST

에서ISO스타일에서 시간대는 항상 UTC로부터의 부호 있는 숫자 오프셋으로 표시되며 그리니치 동쪽 지역에는 양수 부호가 사용됩니다. 오프셋은 다음과 같이 표시됩니다.(시간만) 시간의 정수이면, 그렇지 않으면:mm분의 정수인 경우, 그렇지 않은 경우:mm:ss. (세 번째 경우는 현대 시간대 표준에서는 가능하지 않지만 표준화된 시간대 채택 이전의 타임스탬프로 작업할 때 나타날 수 있습니다.) 다른 토토 캔 스타일에서는 시간대가 현재 시간대에서 일반적으로 사용되는 경우 시간대가 알파벳 약어로 표시됩니다. 그렇지 않으면 ISO 8601 기본 형식의 부호 있는 숫자 오프셋으로 표시됩니다(또는). 이러한 스타일에 표시된 알파벳 약어는 현재 선택된 IANA 시간대 데이터베이스 항목에서 가져온 것입니다.시간대런타임 매개변수; 그들은 다음의 영향을 받지 않습니다.timezone_abbreviations설정.

토토 캔/시간 스타일은 다음을 사용하여 사용자가 선택할 수 있습니다.토토 캔 스타일 설정명령, 그토토 캔 스타일매개변수postgresql.conf구성 파일 또는PGDATESTYLE서버 또는 클라이언트의 환경 변수.

포맷 기능to_char(참조PostgreSQL : 문서 : 개발 : 9.8. 데이터 유형 토토 커뮤니티 토토 커뮤니티 기능)는 토토 캔/시간 출력 형식을 지정하는 보다 유연한 방법으로도 사용할 수 있습니다.

8.5.3. 시간대#

시간대와 시간대 규칙은 지구 기하학뿐만 아니라 정치적 결정의 영향을 받습니다. 전 세계의 시간대는 1900년대에 어느 정도 표준화되었지만 특히 일광 절약 시간제 규칙과 관련하여 임의적인 변경이 계속 발생하는 경향이 있습니다.PostgreSQL은 과거 시간대 규칙에 대한 정보를 얻기 위해 널리 사용되는 IANA(Olson) 시간대 데이터베이스를 사용합니다. 미래에는 특정 시간대에 대해 알려진 최신 규칙이 먼 미래에도 무기한으로 계속 관찰될 것이라고 가정합니다.

PostgreSQL다음과 호환되도록 노력합니다SQL일반적인 사용법에 대한 표준 정의. 그러나,SQL표준에는 토토 캔 및 시간 유형과 기능이 이상하게 혼합되어 있습니다. 두 가지 명백한 문제는 다음과 같습니다.

  • 비록토토 캔유형은 연관된 시간대를 가질 수 없습니다.시간캔을 입력하세요. 실제 세계의 시간대는 토토 캔 및 시간과 연결되지 않는 한 거의 의미가 없습니다. 오프셋은 일광 절약 시간 경계에 따라 일년 내내 달라질 수 있기 때문입니다.

  • 기본 시간대는 다음으로부터의 상수 숫자 오프셋으로 지정됩니다.UTC. 따라서 토토 캔/시간 산술을 수행할 때 일광 절약 시간제에 적응하는 것은 불가능합니다.DST경계.

이러한 문제를 해결하려면 시간대를 사용할 때 토토 캔와 시간을 모두 포함하는 토토 캔/시간 유형을 사용하는 것이 좋습니다. 우리는 그렇습니다아님다음 유형을 사용하는 것이 좋습니다시간대 포함 시간(비록 다음에서 지원되지만포스트그레SQL레거시 애플리케이션 및 규정 준수를 위해SQL표준).포스트그레SQL토토 캔 또는 시간만 포함하는 모든 유형에 대해 현지 시간대를 가정합니다.

모든 시간대 인식 토토 캔와 시간은 내부적으로 저장됩니다.UTC. 에서 지정한 시간대의 현지 시간으로 변환됩니다.시간대클라이언트에 표시되기 전의 구성 매개변수입니다.

PostgreSQL세 가지 다른 형식으로 시간대를 지정할 수 있습니다.

  • 전체 시간대 이름, 예를 들어미국/New_York. 인식된 시간대 이름은 다음 목록에 나열되어 있습니다.pg_timezone_names보기(참조PostgreSQL : 문서 : 개발 : 53.34. 스포츠 토토 베트맨). 포스트그레SQL이 목적을 위해 널리 사용되는 IANA 시간대 데이터를 사용하므로 동일한 시간대 이름이 다른 소프트웨어에서도 인식됩니다.

  • 예를 들어 시간대 약어PST. 이러한 사양은 일광 절약 시간 전환 규칙 집합을 암시할 수 있는 전체 시간대 이름과 달리 UTC로부터의 특정 오프셋만 정의합니다. 인식된 약어는에 나열되어 있습니다.pg_timezone_abbrevs보기(참조토토 사이트 : 문서 : 개발 : 53.32. pg_timezone_abbrevs). 구성 매개변수를 설정할 수 없습니다.시간대또는log_timezone시간대 약어를 사용하지만 토토 캔/시간 입력 값에 약어를 사용할 수 있으며시간대연산자.

  • 시간대 이름 및 약어 외에도PostgreSQL에 설명된 대로 POSIX 스타일 시간대 사양을 허용합니다.Postgresql: Tài liệu: Devel: B.5. Thô토토 số kỹ thuật múi giờ posix. 이 옵션은 일반적으로 명명된 시간대를 사용하는 것보다 바람직하지 않지만 적절한 IANA 시간대 항목을 사용할 수 없는 경우 필요할 수 있습니다.

간단히 말하면, 이는 약어와 전체 이름의 차이입니다. 약어는 UTC로부터의 특정 오프셋을 나타내는 반면, 많은 전체 이름은 현지 일광 절약 시간 규칙을 암시하므로 두 가지 가능한 UTC 오프셋이 있습니다. 예를 들어,2014-06-04 12:00 America/New_York은 뉴욕의 현지 시간 정오를 나타내며, 이 특정 토토 캔는 동부 일광 절약 시간(UTC-4)이었습니다. 그래서2014-06-04 12:00 EDT동일한 순간을 지정합니다. 하지만2014-06-04 12:00 EST해당 토토 캔에 일광 절약 시간제가 명목상 적용되었는지 여부에 관계없이 정오 동부 표준시(UTC-5)를 지정합니다.

참고

POSIX 스타일 시간대 사양의 기호는 ISO-8601 토토 캔/시간 값의 기호와 반대 의미를 갖습니다. 예를 들어, 다음의 POSIX 시간대는2014-06-04 12:00+04UTC-4가 됩니다.

문제를 복잡하게 만들기 위해 일부 관할권에서는 동일한 시간대 약어를 사용하여 서로 다른 시간에 서로 다른 UTC 오프셋을 의미합니다. 예를 들어 모스크바에서MSK어떤 해에는 UTC+3을 의미했고 다른 해에는 UTC+4를 의미했습니다.PostgreSQL지정된 토토 캔에 의미한(또는 가장 최근에 의미했던) 내용에 따라 이러한 약어를 해석합니다. 하지만, 와 마찬가지로EST위의 예에서는 해당 토토 캔의 현지 상용시와 반드시 동일하지는 않습니다.

모든 경우에 시간대 이름과 약어는 대소문자를 구분하지 않고 인식됩니다. (이것은 다음과 같은 변경사항입니다.포스트그레SQL8.2 이전 버전은 일부 상황에서는 대소문자를 구분했지만 다른 상황에서는 구분하지 않았습니다.)

시간대 이름이나 약어 모두 서버에 내장되어 있지 않습니다. 아래에 저장된 구성 파일에서 가져옵니다..../공유/시간대/그리고.../share/timezonesets/설치 디렉토리의 (참조PostgreSQL : 문서 : 개발 : B.4. 날짜/스포츠 토토 사이트 구성 파일).

시간대구성 매개변수는 파일에서 설정할 수 있습니다.postgresql.conf또는에 설명된 다른 표준 방법 중 하나를 사용합니다.범퍼카 토토 : 문서 : 개발 : 19 장 서버 구성. 이를 설정하는 몇 가지 특별한 방법도 있습니다.

  • SQL명령시간대 설정세션의 시간대를 설정합니다. 이것은 다음의 대체 철자법입니다.다음으로 시간대 설정SQL 사양과 더 호환되는 구문을 사용합니다.

  • PGTZ환경 변수는 다음에 의해 사용됩니다libpq클라이언트가 보내는 것시간대 설정연결 시 서버에 명령을 내립니다.

8.5.4. 간격입력#

간격값은 다음 자세한 구문을 사용하여 작성할 수 있습니다:

[@] 수량 단위 [수량 단위...] [방향]

어디에서수량숫자입니다(부호가 있을 수 있음).단위is마이크로초, 밀리초, , , 시간, , , , , 10년, 세기, 밀레니엄또는 이러한 단위의 약어 또는 복수형;방향될 수 있습니다또는 비어 있습니다. at 기호(@)은 선택적 노이즈입니다. 다양한 단위의 양은 적절한 기호 계산을 통해 암시적으로 추가됩니다.모든 필드를 무효화합니다. 이 구문은 간격 출력에도 사용됩니다.간격 스타일다음으로 설정됨postgres_verbose.

일, 시간, 분, 초의 양은 명시적인 단위 표시 없이 지정할 수 있습니다. 예를 들어,'1 12:59:10'다음과 동일하게 읽힙니다.'1일 12시간 59분 10초'. 또한 대시를 사용하여 연도와 월의 조합을 지정할 수 있습니다. 예를 들어'200-10'다음과 동일하게 읽혀집니다'200년 10개월'. (이 짧은 형식은 실제로 허용되는 유일한 형식입니다.SQL표준이며 다음과 같은 경우 출력에 사용됩니다.간격 스타일다음으로 설정됨sql_standard.)

간격 값은 다음 중 하나를 사용하여 ISO 8601 시간 간격으로 기록될 수도 있습니다.지정자가 있는 형식표준 섹션 4.4.3.2 또는대체 형식섹션 4.4.3.3. 지정자가 있는 형식은 다음과 같습니다.

P 수량 단위 [ 수량 단위 ...] [T [ 수량 단위 ...]]

문자열은 a로 시작해야 합니다.P, 다음을 포함할 수 있습니다.T시간 단위를 소개합니다. 사용 가능한 단위 약어는 다음과 같습니다.표 8.16. 단위는 생략 가능하고, 순서에 관계없이 지정할 수 있으나, 하루보다 작은 단위는 뒤에 와야 합니다.T. 특히, 다음의 의미는M이전인지 후인지에 따라 다름T.

표 8.16. ISO 8601 간격 단위 약어

약어 의미
Y
M 월(토토 캔 부분)
W
D
H 시간
M 분(시간 부분)
S

대체 형식으로:

피 [ -개월- ] [ T 시간:: ]

문자열은 다음으로 시작해야 합니다.P그리고T간격의 토토 캔와 시간 부분을 구분합니다. 값은 ISO 8601 토토 캔와 유사한 숫자로 제공됩니다.

a로 간격 상수를 쓸 때필드사양 또는 a로 정의된 간격 열에 문자열을 할당하는 경우필드사양, 표시되지 않은 수량의 해석은 다음에 따라 다릅니다.필드. 예를 들어간격 '1'년1년으로 읽히는 반면간격 '1'1초를 의미합니다. 또한 필드 값오른쪽으로에서 허용하는 최하위 필드의필드사양은 자동으로 삭제됩니다. 예를 들어, 쓰기간격 '1일 2:03:04' 시간-분초 필드는 삭제되지만 일 필드는 삭제되지 않습니다.

에 따르면SQL표준 간격 값의 모든 필드는 동일한 부호를 가져야 하므로 선행 음수 부호가 모든 필드에 적용됩니다. 예를 들어 간격 리터럴의 음수 기호'-1 2:03:04'일 및 시/분/초 부분 모두에 적용됩니다.포스트그레SQL필드가 다른 부호를 가질 수 있도록 허용하고 전통적으로 텍스트 표현의 각 필드를 독립적으로 부호 있는 것으로 처리하므로 이 예에서는 시/분/초 부분이 양수로 간주됩니다. 만일간격 스타일다음으로 설정됨sql_standard그러면 선행 기호가 모든 필드에 적용되는 것으로 간주됩니다(그러나 추가 기호가 나타나지 않는 경우에만). 그렇지 않으면 전통적인PostgreSQL해석이 사용됩니다. 모호함을 피하기 위해 필드가 음수인 경우 각 필드에 명시적인 기호를 첨부하는 것이 좋습니다.

내부적으로,간격값은 월, 일, 마이크로초의 세 가지 정수 필드로 저장됩니다. 한 달의 일수가 다양하고 일광 절약 시간제 전환이 포함된 경우 하루는 23시간 또는 25시간이 될 수 있으므로 이러한 필드는 별도로 유지됩니다. 다른 단위를 사용하는 간격 입력 문자열은 이 형식으로 정규화된 다음 출력을 위해 표준화된 방식으로 재구성됩니다. 예:

SELECT '2년 15개월 100주 99시간 123456789밀리초'::간격;
               간격
--------------------------
 3년 3월 700일 133:17:36.789

여기서는 다음과 같이 이해되는 주입니다.7일은 별도로 유지되었으며 더 작은 시간 단위와 큰 시간 단위를 결합하여 정규화했습니다.

입력 필드 값은 분수 부분을 가질 수 있습니다. 예를 들어'1.5주'또는'01:02:03.45'. 그러나 왜냐하면간격내부에는 정수 필드만 저장하며, 분수 값은 더 작은 단위로 변환해야 합니다. 월보다 큰 단위의 분수 부분은 정수로 반올림됩니다. 예:'1.5년'되다'1년 6개월'. 주와 일의 분수 부분은 한 달에 30일, 하루에 24시간을 가정하여 정수의 일과 마이크로초로 계산됩니다. 예:'1.75개월'되다1월 22일 12:00:00. 초만 출력에서 분수로 표시됩니다.

표 8.17유효한 몇 가지 예를 보여줍니다.간격입력합니다.

표 8.17. 간격입력

설명
1-2 SQL 표준 형식: 1년 2개월
3 4:05:06 SQL 표준 형식: 3일 4시간 5분 6초
1년 2개월 3일 4시간 5분 6초 기존 Postgres 형식: 1년 2개월 3일 4시간 5분 6초
P1Y2M3DT4H5M6S ISO 8601지정자가 있는 형식: 위와 같은 의미
P0001-02-03T04:05:06 ISO 8601대체 형식: 위와 같은 의미

8.5.5. 간격 출력#

앞서 설명했듯이,포스트그레SQL상점간격값은 월, 일, 마이크로초로 표시됩니다. 출력의 경우 월 필드는 12로 나누어 연도 및 월로 변환됩니다. 일 필드는 그대로 표시됩니다. 마이크로초 필드는 시간, 분, 초 및 소수 초로 변환됩니다. 따라서 월, 분, 초는 각각 0~11, 0~59, 0~59 범위를 초과하는 것으로 표시되지 않지만 표시되는 연도, 일, 시간 필드는 상당히 클 수 있습니다. (그justify_days그리고justify_hours큰 토토 캔 또는 시간 값을 다음 상위 필드로 바꾸는 것이 바람직한 경우 함수를 사용할 수 있습니다.)

간격 유형의 출력 형식은 네 가지 스타일 중 하나로 설정될 수 있습니다.sql_standard, 포스트그레스, postgres_verbose또는iso_8601, 명령 사용SET 간격 스타일. 기본값은포스트그레스형식.표 8.18각 출력 스타일의 예를 보여줍니다.

sql_standardstyle은 간격 값이 표준의 제한 사항(양수 및 음수 구성 요소를 혼합하지 않고 연-월만 또는 일-시간만)을 충족하는 경우 간격 리터럴 문자열에 대한 SQL 표준 사양을 준수하는 출력을 생성합니다. 그렇지 않으면 출력은 혼합 기호 간격을 명확하게 하기 위해 명시적인 기호가 추가된 표준 연월 리터럴 문자열과 일/월 리터럴 문자열처럼 보입니다.

의 출력포스트그레스스타일은 다음의 출력과 일치합니다.PostgreSQL8.4 이전 릴리스인 경우토토 캔 스타일매개변수가 다음으로 설정되었습니다.ISO.

의 출력postgres_verbose스타일은 다음의 출력과 일치합니다.포스트그레SQL8.4 이전 버전인 경우토토 캔 스타일매개변수가 비-로 설정되었습니다.ISO출력.

의 출력iso_8601스타일이 다음과 일치함지정자가 있는 형식ISO 8601 표준의 섹션 4.4.3.2에 설명되어 있습니다.

표 8.18. 간격 출력 스타일 예

스타일 사양 연-월 간격 낮 시간 간격 혼합 간격
sql_standard 1-2 3 4:05:06 -1-2 +3 -4:05:06
포스트그레스 1년 2개월 3일 04:05:06 -1년 -2개월 +3일 -04:05:06
postgres_verbose @ 1년 2개월 @ 3일 4시간 5분 6초 @ 1년 2개월 -3일 4시간 5분 6초 전
iso_8601 P1Y2M P3DT4H5M6S P-1Y-2M3D​T-4H-5M-6S