CREATE CAST (SourceTypeasTargetType) 함수funcname(Argtypes) [과제 | 암시 적] CAST CAST (SourceTypeasTargetType) 기능없이 [과제 | 암시 적으로]
토토 꽁 머니 만들기새 출연진을 정의합니다. 에이 토토 꽁 머니 두 데이터 간의 변환을 수행하는 방법을 지정합니다. 유형. 예를 들어,
CAST (42 as Text); 선택
정수 상수 42를 유형으로 변환텍스트이전에 지정된 함수를 호출하여 이 사례텍스트 (int4). (적합하지 않은 경우 토토 꽁 머니가 정의되어 전환이 실패합니다.)
두 가지 유형 일 수 있습니다이진 호환, 이는 서로 변환 될 수 있음을 의미합니다"무료"기능. 이를 위해서는 해당 값이 동일하게 사용해야합니다 내부 표현. 예를 들어, 유형텍스트andvarchar이진입니다 호환.
기본적으로 토토 꽁 머니는 명시적인 토토 꽁 머니에 의해서만 호출 될 수 있습니다. 요청, 그것은 명백한 것입니다cast (xastypename)또는x::typename구성.
토토 꽁 머니가 표시된 경우과제그러면 값을 대상 데이터 유형의 열. 예를 들어, 그렇게 가정foo.f1유형의 열텍스트,
foo (f1) 값 (42);에 삽입
유형에서 토토 꽁 머니가 허용됩니다정수to Type텍스트표시과제, 그렇지 않으면. (우리 일반적으로 용어 사용과제 캐스트이런 종류의 캐스트를 설명하려면)
토토 꽁 머니가 표시된 경우암시 적그러면 어떤 상황에서도 암시 적으로 호출 될 수 있습니다. 할당 또는 내부적으로 표현식. 예를 들어, 이후||테이크텍스트오페란트,
'시간은'||를 선택합니다 지금();
유형에서 토토 꽁 머니가있는 경우에만 허용됩니다타임 스탬프to텍스트표시암시 적. 그렇지 않으면 그럴 것입니다 예를 들어 토토 꽁 머니를 명시 적으로 작성해야합니다.
'시간은'||를 선택합니다 cast (now ()로 텍스트로);
(우리는 일반적으로 용어를 사용암시 적 깁스이런 종류의 캐스트를 설명하려면)
캐스트를 암시 적으로 표시하는 것에 대해 보수적 인 것이 현명합니다. 암시 적 주조 경로의 과잉이 유발할 수 있습니다PostgreSQL놀라운 선택 명령 해석 또는 명령을 해결할 수 없도록 여러 가지 가능한 해석이 있기 때문에 전혀 없습니다. 에이 좋은 경험의 규칙 정보를 예방하는 유형 간의 변환 동일한 일반 유형 범주. 예를 들어, 캐스트int2toint4합리적으로 할 수 있습니다 암시 적이지만의 캐스트float8toint4아마도 과제 전용이어야합니다. 과 같은 크로스 유형 카테고리 캐스트텍스트toint4, 명시 적 전용이 가장 좋습니다.
캐스트를 만들 수 있으려면 출처 또는 대상 데이터 유형. 이진 호환 캐스트를 만들려면해야합니다 슈퍼 유행자. (이 제한은 잘못 되었기 때문에 이루어집니다 이진 호환 캐스트 변환은 쉽게 충돌 할 수 있습니다 섬기는 사람.)
캐스트의 소스 데이터 유형의 이름.
캐스트의 대상 데이터 유형의 이름.
캐스트를 수행하는 데 사용되는 함수. 함수 이름 스키마 자격이있을 수 있습니다. 그렇지 않은 경우 기능이 있습니다 스키마 검색 경로에서 찾았습니다. 함수의 결과 데이터 유형은 캐스트의 대상 유형과 일치해야합니다. 그것은 논쟁은 아래에 설명되어 있습니다.
소스 유형과 대상 유형이 바이너리 호환성이 있으므로 수행 할 기능이 필요하지 않습니다 토토 꽁 머니.
캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다 과제 컨텍스트.
캐스트가 암시 적으로 호출 될 수 있음을 나타냅니다. 문맥.
토토 꽁 머니 구현 함수에는 1 ~ 3 개의 인수가있을 수 있습니다. 첫 번째 인수 유형은 토토 꽁 머니의 출처와 동일해야합니다. 유형. 두 번째 인수는 존재하는 경우 유형이어야합니다Integer; 연관된 유형 수정자를 수신합니다 목적지 유형 또는-1IF 아무것도 없습니다. 세 번째 인수는 존재하는 경우 유형이어야합니다부울; 수신true토토 꽁 머니가 명시적인 토토 꽁 머니 인 경우거짓그렇지 않으면. (기괴하게, SQL 사양은 요구됩니다 명시적이고 암시적인 토토 꽁 머니에 대한 다른 행동 케이스. 이 주장은해야 할 기능에 대해 제공됩니다 그러한 토토 꽁 머니를 구현하십시오. 당신이 당신을 디자인하는 것이 좋습니다 자체 데이터 유형이 중요합니다.)
일반적으로 캐스트는 다른 소스와 대상 데이터가 있어야합니다. 유형. 그러나 동일한 캐스트를 선언 할 수 있습니다. 출처 구현 기능이있는 경우 소스 및 대상 유형 하나 이상의 논쟁으로. 이것은 대표하는 데 사용됩니다 시스템 카탈로그에서 유형 별 길이 강요 기능. 명명 된 함수는 유형의 값을 두 번째 인수에 의해 주어진 수정 자 값을 입력하십시오. (이후 문법은 현재 특정 내장 데이터 유형 만 허용합니다 유형 수정자가 있으며이 기능은 사용자 정의에 사용되지 않습니다. 대상 유형이지만 완전성에 대해 언급합니다.)
토토 꽁 머니가 다른 소스와 대상 유형과 하나 이상의 인수를 취하는 함수는 나타납니다 한 유형에서 다른 유형으로 변환하고 길이를 적용합니다. 한 단계에서 강요. 그러한 항목이 없으면 유형 수정자를 사용하는 유형에 대한 강요에는 두 단계가 포함됩니다. 하나는 데이터 유형 사이에서 변환하고 1 초를 적용 할 수 있습니다. 수정 자.
usePostgreSQL : 문서 : 8.2 : 드롭 사설 토토 사이트to 사용자 정의 캐스트 제거.
유형을 변환 할 수 있다면 두 가지를 기억하십시오. 두 가지 방법을 명시 적으로 선언 해야하는 방법.
이전PostgreSQL7.3, 데이터 유형과 동일한 이름을 가진 모든 기능이 반환되었습니다. 해당 데이터 유형, 다른 유형의 한 가지 주장을 취했습니다. 자동으로 캐스트 함수. 이 협약은 포기되었습니다 스키마의 도입에 직면하여 시스템 카탈로그에서 이진 호환 캐스트를 나타냅니다. 그만큼 내장 된 캐스트 기능은 여전히이 이름 지정 체계를 따르지만 시스템 카탈로그에서 캐스트로 표시되어야합니다PG_CAST
필요하지는 않지만 계속해서 캐스트 구현 이름 지정 의이 오래된 협약을 따르십시오 대상 데이터 유형 다음에 기능합니다. 많은 사용자가 익숙합니다 기능 스타일 표기법을 사용하여 데이터 유형을 캐스트 할 수 있습니다. 그게typename(x). 이 표기법은 사실 더 이상 아무것도 아닙니다 캐스트 구현 기능의 호출보다 적지도 않습니다. 그것은 특별히 캐스트로 취급되지 않았습니다. 전환 기능이있는 경우 이 컨벤션을 지원하도록 지명되지 않았다면 당신은 놀라게 될 것입니다 사용자. 부터PostgreSQL허용 인수가 다른 동일한 함수 이름의 과부하 유형, 다중 변환에 어려움이 없습니다 모두 대상 유형을 사용하는 다른 유형의 기능 이름.
참고 :이전에는 하나의 작은 거짓말이 있습니다 단락 : 여전히 하나의 사례가 있습니다pg_cast의미를 해결하는 데 사용됩니다 명백한 기능 호출의. 함수 호출 인 경우이름(x) 실제 기능과 일치하지 않지만이름데이터 유형의 이름이며PG_CAST이진 호환을 보여줍니다 유형 에서이 유형으로 캐스트x, 호출은 다음과 같이 해석됩니다 명백한 캐스트. 이 예외는 그렇게 만들어집니다 이진 호환 캐스트는 기능을 사용하여 호출 할 수 있습니다 성능이 부족하더라도 구문.
유형에서 토토 꽁 머니를 만들려면텍스트to Typeint4함수 사용int4 (텍스트):
함수 int4 (text);가있는 CAST (텍스트 AS int4)를 만듭니다.
(이 토토 꽁 머니는 이미 시스템에서 사전 정의되어 있습니다.)
the토토 꽁 머니 만들기명령을 준수합니다 그만큼SQL표준을 제외하고 SQL은 이진 호환 유형 또는 추가에 대한 조항을 작성하지 않습니다 구현 기능에 대한 인수.AS 절대적인isPostgreSQL확장도.