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 변환 토토 결과는 수행됩니다 소스 데이터 유형의 출력 기능 호출 및 전달 대상 데이터의 입력 함수에 대한 결과 문자열 유형. 많은 일반적인 경우,이 기능은 쓰기 할 필요가 없습니다. 변환을위한 별도의 토토 결과 함수. I/O 변환 토토 결과 일반 기능 기반 토토 결과와 동일하게 작동합니다. 만 구현이 다릅니다.
기본적으로 토토 결과는 명시적인 토토 결과에 의해서만 호출 될 수 있습니다. 요청, 그것은 명백한 것입니다cast (xastypename)또는x::typename구성.
토토 결과가 표시된 경우과제그런 다음 값을 대상 데이터 유형의 열. 예를 들어, 그렇게 가정foo.f1유형의 열텍스트, 다음 :
foo (f1) 값 (42)에 삽입;
유형에서 토토 결과가 허용됩니다정수to Type텍스트표시과제, 그렇지 않으면. (우리 일반적으로 용어 사용과제 토토 결과이런 종류의 토토 결과를 설명하려면)
토토 결과가 표시된 경우암시 적그러면 어떤 맥락에서도 암시 적으로 호출 될 수 있습니다. 할당 또는 내부적으로 표현식. (우리는 일반적으로 사용합니다 용어암시 적 토토 결과이런 종류를 설명합니다 예를 들어, 토토 결과의.)이 쿼리를 고려하십시오.
선택 2 + 4.0;
파서는 처음에 상수를 유형으로 표시합니다Integerand숫자각각. 없음Integer + 숫자운영자 시스템 카탈로그에는가 있습니다.숫자 + 숫자운영자. 따라서 쿼리가 성공하면 성공합니다 에서 토토 결과정수to숫자사용 가능하고 표시암시 적- 실제로. 파서는 할 것입니다 암시 적 토토 결과를 적용하고 쿼리를 마치 마치 마치 쓴
CAST (2 AS 숫자) + 4.0; 선택
이제 카탈로그는에서 토토 결과를 제공합니다.숫자toInteger. 만약 그렇다면 토토 결과가 표시되었습니다암시 적- 그것은 그렇지 않습니다 - 그러면 파서는 위의 해석과 캐스팅의 대안숫자Constant to정수그리고 적용Integer + Integer운영자. 지식이 부족합니다 선호하는 선택, 쿼리를 포기하고 선언 할 것입니다. 모호한. 두 토토 결과 중 하나만이 암시 적이라는 사실은 우리가 파서에게의 해상도를 선호하도록 가르치는 방식 혼합숫자-and-Integer표현 AS숫자; 그것에 대한 지식이 내장되어 있지 않습니다.
토토 결과를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다PostgreSQL놀라운 선택 명령 해석 또는 명령을 해결할 수 없도록 여러 가지 가능한 해석이 있기 때문에 전혀 없습니다. 에이 좋은 경험의 규칙 정보를 예방하는 유형 간의 변환 동일한 일반 유형 범주. 예를 들어, 토토 결과int2toint4합리적으로 할 수 있습니다 암시 적이지만의 토토 결과float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 유형 카테고리 토토 결과텍스트toint4, 명시 적 전용이 가장 좋습니다.
참고 :때로는 유용성을 위해 필요합니다 표준 준수 이유 여러 가지 암시 적을 제공해야합니다 일련의 유형 중 하나를 토토 결과하여 모호함을 초래합니다. 위와 같이 피할 수 없습니다. 파서에는 폴백이 있습니다 휴리스틱 기반유형 카테고리and선호 유형도움이 될 수 있습니다 그러한 경우에 원하는 행동을 제공하십시오. 보다유형 생성더 많은 것 정보.
토토 결과를 만들 수 있으려면 출처 또는 대상 데이터 유형 및usage다른 유형의 특권. 이진적으로 강력한 토토 결과를 만들려면 당신은 슈퍼업자 여야합니다. (이 제한은 an 잘못된 이진 통합 토토 결과 변환은 쉽게 충돌 할 수 있습니다 섬기는 사람.)
토토 결과의 소스 데이터 유형의 이름.
토토 결과의 대상 데이터 유형의 이름.
18336_18630
소스 유형이 이진을 통합 할 수 있음을 나타냅니다 대상 유형이므로 깁스.
토토 결과가 I/O 변환 토토 결과임을 나타냅니다. 소스의 출력 함수를 호출하여 수행됩니다 데이터 유형 및 결과 문자열을 입력에 전달합니다. 대상 데이터 유형의 기능.
는 토토 결과가 암시 적으로 호출 될 수 있음을 나타냅니다 과제 컨텍스트.
토토 결과가 암시 적으로 호출 될 수 있음을 나타냅니다. 문맥.
토토 결과 구현 함수는 1 ~ 3 개의 인수를 가질 수 있습니다. 첫 번째 인수 유형은 동일하거나 이진을 통합 할 수 있어야합니다. 토토 결과의 소스 유형에서. 두 번째 논쟁, 존재한다면 유형이어야합니다Integer; 유형을받습니다 대상 유형과 관련된 수정 자,-1없는 경우. 세 번째 주장, if 현재, 유형이어야합니다부울; 수신true토토 결과가 명시적인 토토 결과 인 경우거짓그렇지 않으면. (기괴하게, SQL 표준은 명시적이고 암시적인 다른 행동을 요구합니다 경우에 따라 토토 결과. 이 주장은 기능을 위해 제공됩니다 그러한 토토 결과를 구현해야합니다. 디자인하는 것이 좋습니다 자신의 데이터 유형이 중요합니다.)
토토 결과 함수의 리턴 유형은 동일해야합니다. 토토 결과의 대상 유형에 이진을 통합 할 수 있습니다.
일반적으로 토토 결과에는 다른 소스와 대상 데이터가 있어야합니다. 유형. 그러나 동일한 토토 결과를 선언 할 수 있습니다. 출처 구현 기능이있는 경우 소스 및 대상 유형 하나 이상의 논쟁으로. 이것은 대표하는 데 사용됩니다 시스템 카탈로그에서 유형 별 길이 강요 기능. 명명 된 함수는 유형의 값을 두 번째 인수에 의해 주어진 유형 수정 자 값.
토토 결과가 다른 소스와 대상 유형과 하나 이상의 논쟁을 취하는 함수는 지원합니다 한 유형에서 다른 유형으로 변환하고 길이를 적용합니다. 한 단계에서 강요. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요에는 두 개의 토토 결과가 포함됩니다. 단계, 하나는 데이터 유형간에 변환하고 1 초를 적용 할 수 있습니다. 수정 자.
도메인 유형에 대한 토토 결과는 현재 영향을 미치지 않습니다. 도메인으로 또는 주조는 토토 결과와 관련된 토토 결과를 사용합니다. 기본 유형.
usePostgreSQL : 문서 : 9.2 : 드롭 토토 사이트 추천제거하려면 사용자 정의 토토 결과.
유형을 변환 할 수 있다면 두 가지를 기억하십시오. 두 가지 방법을 명시 적으로 선언 해야하는 방법.
일반적으로 토토 결과를 만들 필요는 없습니다 사용자 정의 유형 및 표준 문자열 유형 (텍스트, Varchar및char (n)뿐만 아니라 문자열로 정의 된 사용자 정의 유형 범주).PostgreSQL제공 자동 I/O 변환 토토 결과. 자동 토토 결과 문자열 유형은 과제 토토 결과로 취급되는 반면 자동입니다. 문자열 유형의 토토 결과는 명시 적 전용입니다. 이것을 무시할 수 있습니다 자동 토토 결과를 대체하기 위해 자신의 토토 결과를 선언함으로써 행동, 그러나 일반적으로 그렇게해야 할 유일한 이유는 당신이 원한다면 변환은 표준보다 쉽게 호출 할 수 있습니다 할당 전용 또는 명시 적 전용 설정. 또 다른 가능한 이유 전환이 유형의 I/O 함수; 그러나 그것은 당신이 충분히 놀라운 일입니다 좋은 생각인지에 대해 두 번 생각해야합니다. (작은 내장 유형의 수에는 실제로 다른 동작이 있습니다. 변환의 경우 주로 SQL의 요구 사항 때문입니다 기준.)
이전postgresql7.3, 데이터 유형과 동일한 이름을 가진 모든 기능이 반환되었습니다. 해당 데이터 유형, 다른 유형의 한 가지 주장을 취했습니다. 자동으로 토토 결과 함수. 이 협약은 포기되었습니다 스키마의 도입에 직면하여 시스템 카탈로그에서 이진 통합 토토 결과를 나타냅니다. 그만큼 내장 된 토토 결과 기능은 여전히이 이름 지정 체계를 따르지만 시스템 카탈로그에서 토토 결과로 표시되어야합니다pg_cast
필요하지는 않지만 계속해서 토토 결과 구현 이름 지정 의이 오래된 협약을 따르십시오 대상 데이터 유형 다음에 기능합니다. 많은 사용자가 익숙합니다 기능 스타일 표기법을 사용하여 데이터 유형을 토토 결과 할 수 있습니다. 그게typename(x). 이 표기법은 사실 더 이상 아무것도 아닙니다 토토 결과 구현 기능의 호출보다 적지도 않습니다. 그것은 특별히 토토 결과로 취급되지 않았습니다. 전환 기능이있는 경우 이 컨벤션을 지원하도록 지명되지 않았다면 당신은 놀라게 될 것입니다 사용자. 부터PostgreSQL허용 인수가 다른 동일한 함수 이름의 과부하 유형, 다중 변환에 어려움이 없습니다 모두 대상 유형을 사용하는 다른 유형의 기능 이름.
참고 :실제로 앞의 단락은 an입니다 지나치게 단순화 : 두 가지 사례가 있습니다 함수 통신 구조는 토토 결과 요청으로 취급됩니다 실제 기능과 일치하지 않고. 경우 a 함수 호출이름(x)는 기존과 정확히 일치하지 않습니다 기능이지만이름입니다 데이터 유형의 이름 및PG_CAST이 유형 에서이 유형에 이진적으로 강화 가능한 토토 결과를 제공합니다. 의x이진적 통합 토토 결과로 해석됩니다. 이 예외는 이루어집니다 이진 통합 토토 결과를 사용하여 호출 할 수 있습니다 기능 구문은 기능이 부족하지만. 마찬가지로, 없다면pg_cast입장이지만 출연진은 문자열 유형 또는 통화는 I/O 변환 토토 결과로 해석됩니다. 이것 예외를 사용하면 I/O 변환 토토 결과를 사용하여 호출 할 수 있습니다 기능 구문.
참고 :예외에 대한 예외도 있습니다. 복합 유형에서 문자열 유형으로의 I/O 변환 토토 결과 기능 구문을 사용하여 호출 할 수는 없지만 있어야합니다 명시 적 토토 결과 구문으로 작성 (aight토토 결과또는::표기법). 이 예외는 도입 후 추가되었습니다 자동으로 제공되는 I/O 변환 토토 결과도 발견되었습니다 기능이 있거나 칼럼 참조가 의도되었습니다.