이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 10.2. 토토 결과버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

10.2. 운영자

연산자 호출에 사용되는 특정 연산자는 다음과 같습니다. 아래 절차에 따라 결정됩니다. 참고하세요 절차는 우선순위에 의해 간접적으로 영향을 받습니다. 관련 운영자. 참조섹션 4.1.6더 보기 정보.

운영자 유형 확인

  1. 다음에서 고려할 연산자를 선택하세요.pg_operator시스템 카탈로그. 규정되지 않은 운영자 이름이 사용된 경우(일반적인 경우), 고려되는 연산자는 올바른 이름의 연산자이고 현재 검색 경로에 표시되는 인수 수 (참조섹션 5.8.3). 자격을 갖춘 운영자 이름이 제공된 경우에만 지정된 스키마의 사설 토토가 고려됩니다.

    1. 검색 경로에서 여러 사설 토토를 찾은 경우 동일한 인수 유형, 하나만 나타남 경로의 가장 빠른 것으로 간주됩니다. 그러나 운영자의 서로 다른 인수 유형은 동일하게 간주됩니다. 검색 경로 위치에 상관없이 바닥글.

  2. 사설 토토가 입력을 정확히 받아들이는지 확인하세요 인수 유형. 존재하는 경우(정확한 항목은 하나만 있을 수 있음) 고려된 사설 토토 집합과 일치하는 경우) 이를 사용하세요.

    1. 이진 사설 토토 호출의 인수 중 하나가 의알 수 없음입력하고 가정하세요 이에 대한 다른 인수와 동일한 유형입니다. 확인하세요. 기타 관련 사건알 수 없음이번에는 일치하는 항목을 찾을 수 없습니다. 단계.

  3. 가장 일치하는 항목을 찾으십시오.

    1. 입력된 후보 사설 토토를 폐기합니다. 유형이 일치하지 않아 변환할 수 없습니다( 암시적 변환)을 일치시킵니다.알 수 없음리터럴은 다음과 같이 가정됩니다. 이 목적을 위해 무엇이든 변환 가능합니다. 하나만 있으면 후보가 남아 있으면 사용하십시오. 그렇지 않으면 다음으로 계속 단계.

    2. 모든 후보를 살펴보고 다음과 같은 후보를 유지하세요. 입력 유형과 가장 정확하게 일치합니다. (도메인은 이에 대한 기본 유형과 동일한 것으로 간주됩니다. 목적.) 정확한 내용이 없는 경우 모든 후보자를 유지합니다. 일치합니다. 후보가 하나만 남아 있으면 해당 후보를 사용합니다. 그렇지 않으면 다음 단계를 계속하세요.

    3. 모든 후보를 살펴보고 다음 후보를 유지하세요. (입력 데이터 유형의 유형 중) 선호하는 유형을 허용합니다. 카테고리) 유형 변환이 가장 많은 위치에 있음 요구될 것입니다. 수락하는 후보자가 없으면 모든 후보자를 유지합니다. 선호하는 유형. 후보가 하나만 남아 있으면 해당 후보를 사용합니다. 그렇지 않으면 다음 단계로 진행하세요.

    4. 입력 인수가 다음과 같은 경우알 수 없음, 허용되는 유형 카테고리를 확인하세요. 나머지 인수에 의한 해당 인수 위치에서 후보자. 각 위치에서 다음을 선택하세요.문자열후보자가 수락하는 경우 카테고리 그 카테고리. (문자열에 대한 이러한 편견은 적절합니다. 알 수 없는 유형 리터럴은 문자열처럼 보이기 때문입니다.) 그렇지 않으면 나머지 후보자가 모두 동의하면 동일한 유형 카테고리, 해당 카테고리를 선택하십시오. 그렇지 않으면 올바른 선택을 추론할 수 없기 때문에 실패합니다. 더 이상 단서 없이. 이제 그렇지 않은 후보자를 폐기하십시오. 선택한 유형 카테고리를 수락합니다. 게다가 만약 있다면 후보자는 주어진 인수에서 선호하는 유형을 허용합니다. 직책, 선호하지 않는 후보자를 수락하는 후보자 삭제 해당 인수에 대한 유형입니다.

    5. 후보가 하나만 남으면 그것을 사용하십시오. 그렇지 않은 경우 후보가 있거나 둘 이상의 후보가 남아 있는 경우 실패하다.

몇 가지 예가 이어집니다.

예제 10-1. 지수 사설 토토 유형 해결

다음에는 지수 연산자가 하나만 정의되어 있습니다. 카탈로그이며 유형의 인수를 취합니다.더블 정밀도. 스캐너는 초기 유형을 할당합니다.정수이 쿼리의 두 인수 모두에 표현:

선택 2 ^ 3 AS "exp";

 특급
-----
   8
(1행)

그래서 파서는 피연산자와 피연산자 모두에 대해 유형 변환을 수행합니다. 쿼리는 다음과 같습니다.

SELECT CAST(2 AS 배정밀도) ^ CAST(3 AS 배정밀도) AS "exp";

예 10-2. 문자열 연결 연산자 유형 해결

문자열 유형 작업에 문자열과 유사한 구문이 사용됩니다. 복잡한 확장 유형으로 작업하는 경우에도 마찬가지입니다. 문자열 유형이 지정되지 않은 경우 가능성 있는 연산자와 일치됩니다. 후보자.

하나의 지정되지 않은 인수가 있는 예:

텍스트 'abc' 선택 || 'def' AS "텍스트 및 알 수 없음";

 텍스트가 있고 알 수 없음
------------------
 abcdef
(1행)

이 경우 파서는 사설 토토가 있는지 확인합니다. 복용텍스트두 인수 모두에 대해. 이후 두 번째 인수는 다음과 같아야 한다고 가정합니다. 유형으로 해석됨텍스트.

다음은 지정되지 않은 유형에 대한 연결입니다:

'abc' 선택 || 'def' AS "지정되지 않음";

 불특정
-------------
 abcdef
(1행)

이 경우 사용할 유형에 대한 초기 힌트가 없습니다. 쿼리에 유형이 지정되지 않았기 때문입니다. 그래서 파서는 다음과 같이 보입니다. 모든 후보 연산자에 대해 후보가 있음을 찾습니다. 문자열 범주 및 비트 문자열 범주 입력을 모두 허용합니다. 가능한 경우 문자열 카테고리가 선호되므로 카테고리를 선택한 다음 선호하는 문자열 유형을 선택합니다.텍스트은 특정 유형으로 사용됩니다. 알 수 없는 리터럴을 해결합니다.

예제 10-3. 절대값과 계승 운영자 유형 확인

PostgreSQL사설 토토 카탈로그에는 접두사 사설 토토에 대한 여러 항목이 있습니다.@, 모두 절대값을 구현합니다. 다양한 숫자 데이터 유형에 대한 연산. 이 항목 중 하나 유형에 해당합니다.float8, 이는 숫자 카테고리에서 선호되는 유형입니다. 그러므로PostgreSQL직면했을 때 해당 항목을 사용합니다 숫자가 아닌 입력으로:

SELECT @ '-4.5' AS "abs";
 복근
-----
 4.5
(1행)

여기서 시스템은 다음에서 암시적 변환을 수행했습니다.텍스트float8선택한 사설 토토를 적용하기 전. 우리는 그것을 확인할 수 있습니다float8다른 유형은 아니었습니다. 사용됨:

SELECT @ '-4.5e500' AS "abs";

오류: "-4.5e500"이 배정밀도 유형의 범위를 벗어났습니다.

반면에 후위 사설 토토는!(계승)은 정수 데이터에 대해서만 정의됩니다. 유형이 아님float8. 그래서 우리가 시도한다면 비슷한 경우!, 우리는 다음을 얻습니다:

'20'을 선택하세요! AS "계속";

오류: 연산자가 고유하지 않습니다: "알 수 없음"!
힌트: 가장 적합한 후보 연산자를 선택할 수 없습니다. 명시적으로 추가해야 할 수도 있습니다.
유형 캐스트.

이것은 시스템이 다음 중 어느 것을 결정할 수 없기 때문에 발생합니다. 여러 개 가능!연산자는 다음과 같아야 합니다. 선호됩니다. 명시적인 캐스트를 통해 도움을 드릴 수 있습니다.

캐스트 선택('20' AS int8) ! AS "계속";

      계승
--------
 2432902008176640000
(1행)