이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 젠 토토 생성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

생성 깁스

이름

무지개 토토 만들기-새 무지개 토토 정의

시놉시스

CREATE CAST (source_typeastarget_type)
    함수function_name(argument_type[, ...])
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    기능없이
    [과제 | 암시 적]

CAST CAST (source_typeastarget_type)
    Inout과 함께
    [과제 | 암시 적으로]

설명

무지개 토토 만들기새 출연진을 정의합니다. 에이 무지개 토토 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들어:

CAST (42 AS float8); 선택

정수 상수 42를 유형으로 변환float8이전에 지정된 기능을 호출하여 이 경우float8 (int4). (그렇지 않은 경우 적절한 무지개 토토가 정의되었고 전환이 실패합니다.)

두 가지 유형이 될 수 있습니다이진 강압, 이는 변환이 수행 될 수 있음을 의미합니다"무료"함수를 호출하지 않고. 이것 해당 값이 동일한 내부를 사용해야합니다 대표. 예를 들어, 유형텍스트andVarchar이진입니다 두 가지 방법을 강요 할 수 있습니다. 이진 강압은 반드시 a는 아닙니다 대칭 관계. 예를 들어, 캐스트XMLto텍스트수행 할 수 있습니다 현재 구현에서는 무료이지만 반대 방향 최소한 구문 검사를 수행하는 함수가 필요합니다. (둘 두 가지 방법 모두 이진을 강요하는 유형은 다음과 같이합니다. 이진 호환.)

무지개 토토를 A로 정의 할 수 있습니다I/O 변환 무지개 토토사용inout구문. I/O 변환 무지개 토토는 다음을 호출하여 수행됩니다 소스 데이터 유형의 출력 기능 및 결과 전달 대상 데이터 유형의 입력 기능.

기본적으로, 무지개 토토는 명시적인 무지개 토토에 의해서만 호출 될 수 있습니다. 요청, 그것은 명백한 것입니다cast (xastypename)또는x::typename구성.

무지개 토토가 표시된 경우과제값을 대상 데이터 유형의 열. 예를 들어, 그렇게 가정foo.f1유형의 열입니다.텍스트, 다음 :

foo (f1) 값 (42);에 삽입

유형에서 무지개 토토가 허용됩니다정수to Type텍스트표시과제, 그렇지 않으면. (우리 일반적으로 용어 사용과제 캐스트이런 종류의 캐스트를 설명하려면)

무지개 토토가 표시된 경우암시 적그러면 어떤 맥락에서도 암시 적으로 호출 될 수 있습니다. 할당 또는 내부적으로 표현식. (우리는 일반적으로 사용합니다 용어암시 적 캐스트이런 종류를 설명합니다 예를 들어, 캐스트의.)이 쿼리를 고려하십시오.

선택 2 + 4.0;

파서는 처음에 상수를 유형으로 표시합니다정수and숫자각각. 없음Integer + 숫자운영자 시스템 카탈로그에는가 있습니다.숫자 + 숫자운영자. 따라서 쿼리가 성공하면 성공합니다 에서 무지개 토토정수to숫자사용 가능하고 표시암시 적- 실제로. 파서는 할 것입니다 암시 적 캐스트를 적용하고 쿼리를 마치 마치 마치 쓴

CAST (2 AS 숫자) + 4.0; 선택

지금, 카탈로그는 또한에서 무지개 토토를 제공합니다.숫자toInteger. 만약 그렇다면 캐스트가 표시되었습니다암시 적- that 그렇지 않습니다 - 그러면 파서는 위의 해석과 캐스팅의 대안숫자Constant toInteger그리고 적용정수 + Integer운영자. 지식이 부족합니다 선호하는 선택, 쿼리를 포기하고 선언 할 것입니다. 모호한. 두 캐스트 중 하나만이 암시 적이라는 사실은 우리가 파서에게의 해상도를 선호하도록 가르치는 방식 혼합숫자-and-Integer표현 AS숫자; 그것에 대한 지식이 내장되어 있지 않습니다.

캐스트를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다PostgreSQL놀라운 선택 명령 해석 또는 명령을 해결할 수 없도록 여러 가지 가능한 해석이 있기 때문에 전혀 없습니다. 에이 좋은 경험의 규칙 정보를 예방하는 유형 간의 변환 동일한 일반 유형 범주. 예를 들어, 캐스트int2toint4합리적으로 할 수 있습니다 암시 적이지만의 캐스트float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 유형 카테고리 캐스트텍스트toint4, 명시 적 전용이 가장 좋습니다.

참고 :때로는 유용성을 위해 필요합니다 표준 준수 이유 여러 가지 암시 적을 제공해야합니다 일련의 유형 중 하나를 캐스트하여 모호함을 초래합니다. 위와 같이 피할 수 없습니다. 파서에는 폴백이 있습니다 휴리스틱 기반유형 카테고리and선호 유형도움이 될 수 있습니다 그러한 경우에 원하는 행동을 제공하십시오. 보다유형 만들기더 많은 것 정보.

캐스트를 만들 수 있으려면 출처 또는 대상 데이터 유형. 이진적 통합 캐스트를 만들려면해야합니다 슈퍼 유행자. (이 제한은 잘못 되었기 때문에 이루어집니다 이진 계약 캐스트 변환은 쉽게 충돌 할 수 있습니다 섬기는 사람.)

매개 변수

source_type

캐스트의 소스 데이터 유형의 이름.

target_type

캐스트의 대상 데이터 유형의 이름.

function_name(argument_type[, ...])

캐스트를 수행하는 데 사용되는 함수. 함수 이름 스키마 자격이 될 수 있습니다. 그렇지 않은 경우 기능이 있습니다 스키마 검색 경로에서 찾았습니다. 함수의 결과 데이터 유형은 캐스트의 대상 유형과 일치해야합니다. 그것은 논쟁은 아래에 설명되어 있습니다.

함수 없음

소스 유형이 이진을 통합 할 수 있음을 나타냅니다 대상 유형이므로 깁스.

inout

무지개 토토가 I/O 변환 무지개 토토임을 나타냅니다. 소스의 출력 함수를 호출하여 수행됩니다 데이터 유형 및 결과를 입력 함수로 전달합니다. 대상 데이터 유형.

과제

캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다 과제 컨텍스트.

암시 적

캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다. 문맥.

무지개 토토 구현 함수는 1 ~ 3 개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 동일하거나 이진을 통합 할 수 있어야합니다. 무지개 토토의 소스 유형에서. 두 번째 논쟁, 존재한다면 유형이어야합니다Integer; 유형을받습니다 대상 유형과 관련된 수정 자,-1없는 경우. 세 번째 주장, if 현재, 유형이어야합니다부울; 수신true무지개 토토가 명시적인 무지개 토토 인 경우거짓그렇지 않으면. (기괴하게, SQL 표준은 명시적이고 암시적인 다른 행동을 요구합니다 경우에 따라 무지개 토토. 이 주장은 기능을 위해 제공됩니다 그러한 무지개 토토를 구현해야합니다. 디자인하는 것이 좋습니다 자신의 데이터 유형이 중요합니다.)

무지개 토토 함수의 반환 유형은 동일해야합니다. 무지개 토토의 대상 유형에 이진을 통합 할 수 있습니다.

일반적으로 캐스트는 다른 소스와 대상 데이터가 있어야합니다. 유형. 그러나 동일한 캐스트를 선언 할 수 있습니다. 출처 구현 기능이있는 경우 소스 및 대상 유형 하나 이상의 논쟁으로. 이것은 대표하는 데 사용됩니다 시스템 카탈로그에서 유형 별 길이 강요 기능. 명명 된 함수는 유형의 값을 두 번째 인수에 의해 주어진 유형 수정 자 값.

캐스트가 다른 소스와 대상 유형과 하나 이상의 인수를 취하는 함수는 나타납니다 한 유형에서 다른 유형으로 변환하고 길이를 적용합니다. 한 단계에서 강요. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요에는 두 단계가 포함됩니다. 하나는 데이터 유형 사이에서 변환하고 1 초를 적용 할 수 있습니다. 수정 자.

노트

usePostgreSQL : 문서 : 9.0 : 드롭 토토 결과제거하려면 사용자 정의 캐스트.

유형을 변환 할 수 있다면 두 가지를 기억하십시오. 두 가지 방법을 명시 적으로 선언 해야하는 방법.

일반적으로 캐스트를 만들 필요는 없습니다 사용자 정의 유형 및 표준 문자열 유형 (텍스트, Varcharchar (n)뿐만 아니라 문자열로 정의 된 사용자 정의 유형 범주).PostgreSQL제공 자동 I/O 변환 캐스트. 자동 캐스트 문자열 유형은 과제 캐스트로 취급되는 반면 자동입니다. 문자열 유형의 캐스트는 명시 적 전용입니다. 이것을 무시할 수 있습니다 자동 캐스트를 대체하기 위해 자신의 캐스트를 선언함으로써 행동, 그러나 일반적으로 그렇게해야 할 유일한 이유는 당신이 원한다면 변환은 표준보다 쉽게 ​​호출 할 수 있습니다 할당 전용 또는 명시 적 전용 설정. 또 다른 가능한 이유 전환이 유형의 I/O 함수; 그러나 그것은 당신이 충분히 놀라운 일입니다 좋은 생각인지에 대해 두 번 생각해야합니다. (작은 내장 유형의 수에는 실제로 다른 동작이 있습니다. 변환의 경우 주로 SQL의 요구 사항 때문입니다 기준.)

이전PostgreSQL7.3, 데이터 유형과 동일한 이름을 가진 모든 기능이 반환되었습니다. 해당 데이터 유형, 다른 유형의 한 가지 주장을 취했습니다. 자동으로 캐스트 함수. 이 협약은 포기되었습니다 스키마의 도입에 직면하여 시스템 카탈로그에서 이진 통합 캐스트를 나타냅니다. 그만큼 내장 된 캐스트 기능은 여전히이 이름 지정 체계를 따르지만 시스템 카탈로그에서 캐스트로 표시되어야합니다pg_cast

필요하지는 않지만 계속해서 캐스트 구현 이름 지정 의이 오래된 협약을 따르십시오 대상 데이터 유형 다음에 기능합니다. 많은 사용자가 익숙합니다 기능 스타일 표기법을 사용하여 데이터 유형을 캐스트 할 수 있습니다. 그게typename(x). 이 표기법은 사실 더 이상 아무것도 아닙니다 캐스트 구현 기능의 호출보다 적지도 않습니다. 그것은 특별히 캐스트로 취급되지 않았습니다. 전환 기능이있는 경우 이 컨벤션을 지원하도록 지명되지 않았다면 당신은 놀라게 될 것입니다 사용자. 부터PostgreSQL허용 인수가 다른 동일한 함수 이름의 과부하 유형, 다중 변환에 어려움이 없습니다 모두 대상 유형을 사용하는 다른 유형의 기능 이름.

참고 :실제로 앞의 단락은 an입니다 지나치게 단순화 : 두 가지 사례가 있습니다 함수 통신 구조는 무지개 토토 요청으로 취급됩니다 실제 기능과 일치하지 않고. 경우 a 함수 호출이름(x)는 기존과 정확히 일치하지 않습니다 기능이지만이름is 데이터 유형의 이름 및PG_CAST유형 에서이 유형에 이진을 통한 무지개 토토를 제공합니다. 의x이진적 통합 캐스트로 해석됩니다. 이 예외는 이루어집니다 이진 통합 캐스트를 사용하여 호출 할 수 있습니다 기능 구문은 기능이 부족하지만. 마찬가지로, 없다면pg_cast입장이지만 캐스트는 문자열 유형 또는 통화는 I/O 변환 캐스트로 해석됩니다. 이것 예외를 사용하면 I/O 변환 캐스트를 사용하여 호출 할 수 있습니다 기능 구문.

예제

Type에서 할당 무지개 토토를 작성하려면bigintto Typeint4기능int4 (bigint):

함수 int4 (bigint)가 할당 된 상태로 캐스트 (bigint as int4) 만들기;

(이 무지개 토토는 이미 시스템에서 사전 정의되어 있습니다.)

호환성

the무지개 토토 만들기명령을 준수합니다 그만큼SQL표준을 제외하고 SQL 구현 기능에 대한 인수.AS 절대적인isPostgreSQL확장도.