형식 호환성 및 변환
다음 설명에서는 AWS Clean Rooms에서 유형 변환 규칙 및 데이터 유형 호환성이 작동하는 방식에 대해 설명합니다.
호환성
데이터 형식 일치, 즉 리터럴 값 및 상수를 데이터 형식과 일치시키는 것은 아래 작업을 포함해 다양한 데이터베이스 작업에서 발생합니다.
-
테이블에 대한 데이터 조작 언어(DML) 작업
-
UNION, INTERSECT 및 EXCEPT 쿼리
-
CASE 표현식
-
LIKE, IN 등 조건자 평가
-
데이터를 비교하거나 추출하는 SQL 함수에 대한 평가
-
수학 연산자를 사용한 비교
위의 작업 결과는 형식 변환 규칙과 데이터 형식 호환성에 따라 달라집니다. 호환성에는 특정 값과 특정 데이터 형식의 1대 1 일치가 항상 필요한 것은 아니라는 의미가 내포되어 있습니다. 일부 데이터 형식은 호환이 가능하기 때문에 묵시적 변환, 즉 강제 변환이 가능합니다. 자세한 내용은 묵시적인 변환 형식 단원을 참조하십시오. 데이터 형식이 호환되지 않을 때는 명시적인 변환 함수를 사용하여 다른 데이터 형식으로 값을 변환할 수 있는 경우도 있습니다.
일번적인 호환성 및 변환 규칙
호환성 및 변환 규칙은 다음과 같습니다.
-
일반적으로 동일한 형식 카테고리에 해당하는 데이터 형식(여러 가지 숫자 데이터 형식 등)은 서로 호환이 가능하기 때문에 묵시적으로 변환할 수 있습니다.
예를 들어 묵시적인 변환을 통해 소수 값을 정수 열에 삽입할 수 있습니다. 이때 소수는 정수로 반올림됩니다. 또는 날짜에서
2008
같은 숫자 값을 추출하여 정수 열에 삽입하는 것도 가능합니다. -
숫자 데이터 형식은 범위 외 값을 삽입하려고 할 때 오버플로우 조건이 발생할 가능성이 높습니다. 예를 들어 정밀도가 5인 소수 값은 정밀도가 4로 정의된 DECIMAL 열에 맞지 않습니다. 정수 또는 십진수 전체 부분이 잘리지 않습니다. 그러나 십진수의 소수 부분은 필요에 따라 위 또는 아래로 반올림할 수 있습니다. 하지만 테이블에서 선택한 값의 명시적인 변환 결과는 반올림되지 않습니다.
-
서로 다른 유형의 문자열이 호환됩니다. 예를 들어 단일 바이트 데이터가 포함된 VARCHAR 열과 CHAR 열 문자열은 서로 호환이 되어 묵시적으로 변환할 수 있습니다. 멀티바이트 데이터가 포함되는 VARCHAR 문자열은 호환되지 않습니다. 그 밖에 문자열이 적합한 리터럴 값인 경우에는 문자열을 날짜, 시간, 타임스탬프 또는 숫자 값으로 변환할 수도 있습니다. 선행 또는 후행 공백은 무시됩니다. 반대로 날짜, 시간, 타임스탬프 및 숫자 값을 고정 길이 또는 가변 길이 문자열로 변환하는 것도 가능합니다.
참고
문자열을 숫자 형식으로 변환하려면 문자열에 숫자를 표현한 문자가 있어야 합니다. 예를 들어
'1.0'
이나'5.9'
같은 문자열은 소수 값으로 변환할 수 있지만 문자열'ABC'
는 어떤 숫자 형식으로도 변환할 수 없습니다. -
DECIMAL 값을 문자열과 비교하면 AWS Clean Rooms은 문자열을 DECIMAL 값으로 변환하려고 시도합니다. 모든 다른 숫자 값을 문자열과 비교하는 경우 숫자 값이 문자열로 변환됩니다. 반대 변환(예: 문자열을 정수로 변환하거나 DECIMAL 값을 문자열로 변환)을 적용하려면 CAST 함수과 같은 명시적 함수를 사용하세요.
-
64비트 DECIMAL 또는 NUMERIC 값의 정밀도를 높여서 변환하려면 CAST 또는 CONVERT 같은 명시적인 변환 함수를 사용해야 합니다.
-
DATE 또는 TIMESTAMP를 TIMESTAMPTZ로 변환하거나 TIME을 TIMETZ로 변환할 때 시간대는 현재 세션 시간대로 설정됩니다. 세션 시간대는 기본적으로 UTC입니다.
-
마찬가지로 TIMESTAMPTZ 역시 현재 세션 시간대에 따라 DATE, TIME 또는 TIMESTAMP로 변환됩니다. 세션 시간대는 기본적으로 UTC입니다. 변환 후에는 시간대 정보가 삭제됩니다.
-
시간대를 지정하여 타임스탬프를 표현한 문자열은 현재 세션 시간대(기본적으로 UTC)에 따라 TIMESTAMPTZ로 변환됩니다. 마찬가지로 시간대가 지정된 시간을 표현하는 문자열은 현재 세션 시간대(기본값 UTC)를 사용하여 TIMETZ로 변환됩니다.
묵시적인 변환 형식
묵시적인 변환 유형은 다음과 같이 두 가지입니다.
-
인수의 묵시적 변환(INSERT 또는 UPDATE 명령의 값 설정 등)
-
표현식의 묵시적 변환(WHERE 절의 비교 등)
다음 표는 인수 또는 표현식에서 묵시적으로 변환할 수 있는 데이터 형식을 나열한 것입니다. 그 밖에 명시적인 변환 함수를 통한 변환도 가능합니다.
입력 형식 | 출력 형식 |
---|---|
BIGINT | BOOLEAN |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
CHAR | VARCHAR |
날짜 | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
INTEGER (INT) | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
REAL (FLOAT4) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT) | |
SMALLINT | |
VARCHAR | |
SMALLINT | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT) | |
REAL (FLOAT4) | |
VARCHAR | |
TIMESTAMP | CHAR |
날짜 | |
VARCHAR | |
TIMESTAMPTZ | |
TIME | |
TIMESTAMPTZ | CHAR |
날짜 | |
VARCHAR | |
TIMESTAMP | |
TIMETZ | |
TIME | VARCHAR |
TIMETZ | |
TIMETZ | VARCHAR |
TIME |
참고
TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ 또는 문자열 사이의 묵시적인 변환은 현재 세션 시간대를 사용합니다.
VARBYTE 데이터 유형은 암시적으로 다른 데이터 유형으로 변환될 수 없습니다. 자세한 내용은 CAST 함수 단원을 참조하십시오.