CREATE CAST (SourceTypeasTargetType) 함수funcName(Argtypes) [과제 | 암시 적] CAST CAST (SourceTypeasTargetType) 기능없이 [과제 | 암시 적으로]
토토 핫 만들기새 출연진을 정의합니다. 에이 토토 핫 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들어:
CAST (42 AS float8); 선택
정수 상수 42를 유형으로 변환float8이전에 지정된 기능을 호출하여 이 경우float8 (int4). (그렇지 않은 경우 적절한 토토 핫가 정의되었고 전환이 실패합니다.)
두 가지 유형이 될 수 있습니다이진 호환, 이는 서로 변환 될 수 있음을 의미합니다"무료"기능. 이를 위해서는 해당 값이 동일하게 사용해야합니다 내부 표현. 예를 들어, 유형텍스트andvarchar이진입니다 호환.
기본적으로 토토 핫는 명시적인 토토 핫에 의해서만 호출 될 수 있습니다. 요청, 그것은 명백한 것입니다cast (xastypename)또는x::typename구성.
토토 핫가 표시된 경우과제그런 다음 값을 대상 데이터 유형의 열. 예를 들어, 그렇게 가정foo.f1유형의 열텍스트, 다음 :
foo (f1) 값 (42);에 삽입
12493_12533Integerto Type텍스트표시과제, 그렇지 않으면. (우리 일반적으로 용어 사용과제 캐스트이런 종류의 캐스트를 설명하려면)
토토 핫가 표시된 경우암시 적그러면 어떤 상황에서도 암시 적으로 호출 될 수 있습니다. 할당 또는 내부적으로 표현식. (우리는 일반적으로 사용합니다 용어암시 적 캐스트이런 종류를 설명합니다 예를 들어, 캐스트의.)이 쿼리를 고려하십시오.
2 + 4.0; 선택
파서는 처음에 상수를 유형 인 것으로 표시합니다정수및숫자각각. 없음정수 + 숫자운영자 시스템 카탈로그에는가 있습니다.숫자 + 숫자연산자. 따라서 쿼리가 성공하면 성공합니다 에서 토토 핫정수to숫자사용 가능하고 표시암시 적- 실제로. 파서는 할 것입니다 암시 적 캐스트를 적용하고 쿼리를 마치 마치 마치 쓴
CAST (2 AS 숫자) + 4.0; 선택
지금, 카탈로그는 또한에서 토토 핫를 제공합니다.숫자to정수. 만약 그렇다면 캐스트가 표시되었습니다암시 적- 그 그렇지 않습니다 - 그러면 파서는 위의 해석과 캐스팅의 대안숫자Constant toInteger그리고 적용정수 + Integer운영자. 지식이 부족합니다 선호하는 선택, 쿼리를 포기하고 선언 할 것입니다. 모호한. 두 캐스트 중 하나만이 암시 적이라는 사실은 우리가 파서에게의 해상도를 선호하도록 가르치는 방식 혼합숫자-and-정수표현 AS숫자; 그것에 대한 지식이 내장되어 있지 않습니다.
캐스트를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다PostgreSQL놀라운 선택 명령 해석 또는 명령을 해결할 수 없도록 여러 가지 가능한 해석이 있기 때문에 전혀 없습니다. 에이 좋은 경험의 규칙 정보를 예방하는 유형 간의 변환 동일한 일반 유형 범주. 예를 들어, 캐스트int2toint4합리적으로 할 수 있습니다 암시 적이지만의 캐스트float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 유형 카테고리 캐스트텍스트toint4, 명시 적 전용이 가장 좋습니다.
캐스트를 만들 수 있으려면 출처 또는 대상 데이터 유형. 이진 호환 캐스트를 만들려면해야합니다 슈퍼 유행자. (이 제한은 잘못 되었기 때문에 이루어집니다 이진 호환 캐스트 변환은 쉽게 충돌 할 수 있습니다 섬기는 사람.)
캐스트의 소스 데이터 유형의 이름.
캐스트의 대상 데이터 유형의 이름.
캐스트를 수행하는 데 사용되는 함수. 함수 이름 스키마 자격이 될 수 있습니다. 그렇지 않은 경우 기능이 있습니다 스키마 검색 경로에서 찾았습니다. 함수의 결과 데이터 유형은 캐스트의 대상 유형과 일치해야합니다. 그것은 논쟁은 아래에 설명되어 있습니다.
소스 유형과 대상 유형이 바이너리 호환성이 있으므로 수행 할 기능이 필요하지 않습니다 토토 핫.
캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다 과제 컨텍스트.
캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다. 문맥.
토토 핫 구현 함수는 1 ~ 3 개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 토토 핫의 출처와 동일해야합니다. 유형. 두 번째 인수는 존재하는 경우 유형이어야합니다정수; 연관된 유형 수정자를 수신합니다 목적지 유형 또는-1if 아무것도 없습니다. 세 번째 인수는 존재하는 경우 유형이어야합니다부울; 수신True토토 핫가 명시적인 토토 핫 인 경우거짓그렇지 않으면. (기괴하게, SQL 사양은 요구됩니다 명시적이고 암시적인 토토 핫에 대한 다른 행동 케이스. 이 주장은해야 할 기능에 대해 제공됩니다 그러한 토토 핫를 구현하십시오. 당신이 당신을 디자인하는 것이 좋습니다 자체 데이터 유형이 중요합니다.)
일반적으로 토토 핫는 다른 소스와 대상 데이터가 있어야합니다. 유형. 그러나 동일한 토토 핫를 선언 할 수 있습니다. 출처 구현 기능이있는 경우 소스 및 대상 유형 하나 이상의 논쟁으로. 이것은 대표하는 데 사용됩니다 시스템 카탈로그에서 유형 별 길이 강요 기능. 명명 된 함수는 유형의 값을 두 번째 인수에 의해 주어진 유형 수정 자 값.
토토 핫가 다른 소스와 대상 유형과 하나 이상의 인수를 취하는 함수는 나타납니다 한 유형에서 다른 유형으로 변환하고 길이를 적용합니다. 한 단계에서 강요. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요에는 두 단계가 포함됩니다. 하나는 데이터 유형 사이에서 변환하고 1 초를 적용 할 수 있습니다. 수정 자.
usePostgreSQL : 문서 : 8.3 : 드롭 스포츠 토토 베트맨TO 사용자 정의 토토 핫 제거.
유형을 변환 할 수 있다면 두 가지를 기억하십시오. 두 가지 방법을 명시 적으로 선언 해야하는 방법.
일반적으로 토토 핫를 만들 필요는 없습니다 사용자 정의 유형 및 표준 문자열 유형 (텍스트, Varchar및char (n)).PostgreSQL자동으로 다른 유형을 호출하여 문자열 유형으로 캐스트를 처리합니다. 출력 함수 또는 정적 유형에서 캐스트를 반대로 처리합니다. 다른 유형의 입력 함수를 호출함으로써. 이것들 자동으로 제공되는 캐스트는로 알려져 있습니다.I/O 변환 토토 핫. I/O 변환 토토 핫 문자열 유형은 과제 캐스트로 취급되는 반면 I/O 문자열 유형의 변환 캐스트는 명시 적 전용입니다. 당신은 할 수 있습니다 자신의 캐스트를 대체하도록 선언 하여이 행동을 무시합니다. 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 변환 토토 핫를 사용하여 호출 할 수 있습니다 기능 구문.
유형에서 토토 핫를 만들려면bigintto 유형int4함수 사용int4 (bigint):
함수 int4 (bigint);로 CAST (bigint AS int4)를 작성하십시오.
(이 토토 핫는 이미 시스템에서 사전 정의되어 있습니다.)
the토토 핫 만들기명령을 준수합니다 그만큼SQL표준을 제외하고 SQL은 이진 호환 유형 또는 추가에 대한 조항을 작성하지 않습니다 구현 기능에 대한 인수.AS 절대적인isPostgreSQL확장도.