Postgresql_DB_가이드

유형 캐스트

구일칠구 2022. 7. 18. 16:48

유형 캐스트는 한 데이터 유형에서 다른 데이터 유형으로의 변환을 지정합니다. PostgreSQL 은 유형 캐스트에 대해 두 가지 동등한 구문을 허용합니다.

캐스트 ( expressionAS type)
  expression::type
  

CAST구문은 SQL을 따릅니다 . 구문 ::은 과거 PostgreSQL 사용입니다.

알려진 형식의 값 식에 캐스트가 적용되면 런타임 형식 변환을 나타냅니다. 적절한 유형 변환 작업이 정의된 경우에만 캐스트가 성공합니다. 이것은 섹션 4.1.2.7 에 표시된 대로 상수와 함께 캐스트를 사용하는 것과 미묘하게 다릅니다 . 장식되지 않은 문자열 리터럴에 적용된 캐스트는 리터럴 상수 값에 대한 유형의 초기 할당을 나타내므로 모든 유형에 대해 성공합니다(문자열 리터럴의 내용이 데이터 유형에 대해 허용되는 입력 구문인 경우).

값 표현식이 생성해야 하는 유형에 대한 모호성이 없는 경우(예: 테이블 열에 할당된 경우) 명시적 유형 캐스트를 일반적으로 생략할 수 있습니다. 이러한 경우 시스템은 자동으로 유형 캐스트를 적용합니다. 그러나 자동 캐스팅은 시스템 카탈로그에서 " 암시적으로 적용할 수 있음 " 으로 표시된 캐스트에 대해서만 수행됩니다 . 다른 캐스트는 명시적 캐스팅 구문으로 호출해야 합니다. 이 제한은 놀라운 변환이 자동으로 적용되는 것을 방지하기 위한 것입니다.

함수와 같은 구문을 사용하여 유형 캐스트를 지정할 수도 있습니다.

typename( expression)
  

그러나 이것은 이름이 함수 이름으로도 유효한 유형에 대해서만 작동합니다. 예를 들어, double precision이 방법은 사용할 수 없지만 동등한 것은 float8사용할 수 있습니다. 또한 , , 및 이름 interval은 time구문 timestamp충돌로 인해 큰따옴표로 묶인 경우에만 이 방식으로 사용할 수 있습니다. 따라서 함수와 같은 캐스트 구문을 사용하면 불일치가 발생하므로 피해야 합니다.

메모

함수와 같은 구문은 사실 그냥 함수 호출입니다. 두 가지 표준 캐스트 구문 중 하나를 사용하여 런타임 변환을 수행하면 내부적으로 등록된 함수를 호출하여 변환을 수행합니다. 관례에 따라 이러한 변환 함수는 출력 유형과 이름이 같으므로 " 함수와 유사한 구문 " 은 기본 변환 함수를 직접 호출하는 것에 불과합니다. 분명히 이것은 이식 가능한 응용 프로그램이 의존해야 하는 것이 아닙니다. 자세한 내용은 CREATE CAST 를 참조하십시오 .

4.2.10. 데이터 정렬 표현식

COLLATE절은 식의 데이터 정렬을 재정의합니다. 적용되는 표현식에 추가됩니다.

expr함께 합치다collation
  

여기서 collation은 가능한 스키마 수식 식별자입니다. COLLATE절은 연산자보다 더 엄격하게 바인딩합니다. 필요한 경우 괄호를 사용할 수 있습니다.

데이터 정렬이 명시적으로 지정되지 않은 경우 데이터베이스 시스템은 표현식에 포함된 열에서 데이터 정렬을 파생하거나 표현식에 열이 포함되지 않은 경우 기본적으로 데이터베이스의 기본 데이터 정렬을 사용합니다.

절의 두 가지 일반적인 용도는 COLLATE절의 정렬 순서를 재정의하는 것 ORDER BY입니다. 예를 들면 다음과 같습니다.

SELECT a, b, c FROM tbl WHERE ... ORDER BY a COLLATE "C";
  

로케일에 민감한 결과가 있는 함수 또는 연산자 호출의 데이터 정렬을 재정의합니다. 예를 들면 다음과 같습니다.

SELECT * FROM tbl WHERE a > 'foo' COLLATE "C";
  

후자의 경우 COLLATE절이 영향을 미치려는 연산자의 입력 인수에 첨부됩니다. 연산자 또는 함수 호출의 어떤 인수에 COLLATE절이 연결되었는지는 중요하지 않습니다. 연산자 또는 함수에 의해 적용되는 데이터 정렬은 모든 인수를 고려하여 파생되고 명시적 COLLATE절은 다른 모든 인수의 데이터 정렬을 재정의하기 때문입니다. (그러나 하나 이상의 인수에 일치하지 않는 COLLATE절을 첨부하는 것은 오류입니다. 자세한 내용은 섹션 24.2 를 참조하십시오 .) 따라서 이전 예제와 동일한 결과를 제공합니다.

SELECT * FROM tbl WHERE a COLLATE "C" > 'foo';
  

그러나 이것은 오류입니다.

SELECT * FROM tbl WHERE (a > 'foo') COLLATE "C";
  

>데이터 정렬 이 불가능한 데이터 유형인 연산자 의 결과에 데이터 정렬을 적용하려고 시도하기 때문 boolean입니다.

4.2.11. 스칼라 하위 쿼리

스칼라 하위 쿼리는 하나의 SELECT열이 있는 정확히 하나의 행을 반환하는 괄호 안의 일반 쿼리입니다. ( 쿼리 작성에 대한 정보는 7장SELECT 을 참조하십시오.) 쿼리가 실행되고 단일 반환 값이 주변 값 표현식에 사용됩니다. 둘 이상의 행 또는 둘 이상의 열을 반환하는 쿼리를 스칼라 하위 쿼리로 사용하는 것은 오류입니다. (그러나 특정 실행 중에 하위 쿼리가 행을 반환하지 않으면 오류가 발생하지 않습니다. 스칼라 결과는 null로 간주됩니다.) 하위 쿼리는 주변 쿼리의 변수를 참조할 수 있으며 이는 한 평가 동안 상수로 작동합니다. 하위 쿼리의. 하위 쿼리와 관련된 다른 표현은 9.23절 을 참조하십시오 .

예를 들어 다음은 각 주에서 가장 큰 도시 인구를 찾습니다.

SELECT 이름, (SELECT max(pop) FROM 도시 WHERE city.state = States.name)
  발신 상태;

'Postgresql_DB_가이드' 카테고리의 다른 글

데이터 정의  (0) 2022.08.04
함수 호출  (0) 2022.08.04
창 함수 호출  (0) 2022.07.18
연산자 호출  (0) 2022.07.18
4.2. 값 표현식  (0) 2022.07.18