[PostgreSQl] 타입 변환 (PostgreSQL CAST To Convert)

CAST 에 대한 간단한 소개

PostgreSql 에서는 Cast를 사용하여 타입 변화를 할 수 있습니다.
숫자를 문자로 변환하거나, 숫자를 날짜로 변환할 수 있습니다.


### 한눈에 보는 `CAST` 총정리

PostgreSql 에서는 :: 연산자를 사용해 간단하게 줄여서 타입 변환을 할 수 있습니다.

문자를 숫자 형식으로 변환
SELECT CAST ('100' AS INTEGER);
문자를 날짜 형식으로 변환
SELECT CAST ('2015-01-01' AS DATE);
SELECT '2019-06-15 14:30:20'::timestamp;
문자를 더블 형식으로 변환
SELECT CAST ('10.2' AS DOUBLE PRECISION);
문자를 참거짓으로 변환
SELECT CAST('true' AS BOOLEAN), CAST('F' as BOOLEAN);
문자를 인터벌로 변환
SELECT '15 minute'::interval;



더 자세한 설명을 원하신다면 아래에서 확인해 주세요!

CAST syntax

1
CAST ( expression AS target_type );



:: 연산자

CAST를 대신하여 :: 연산자를 사용하여 더 간단하게 타입을 변환할 수 있습니다.

1
expression::type

간단하게 예는 아래와 같습니다.

1
2
3
SELECT
'100'::INTEGER,
'01-OCT-2015'::DATE;

주의할 점은 :: 연산자는 PostgreSQL에서만 사용됩니다. SQL 스탠다드를 따르지 않습니다.



PostgreSQL CAST 예시

1)문자를 숫자로 변환

1
2
SELECT
CAST ('100' AS INTEGER);

결과는 아래와 같습니다.

int4
100

하지만 아래와 같이 잘못된 변환을 시도한다면 오류가 발생할 것입니다.

1
2
3
SELECT
CAST ('10C' AS INTEGER);
--SQL Error [22P02]: 오류: 정수 자료형 대한 잘못된 입력 구문: "10C"



2)문자를 날짜 형식으로 변환

1
2
3
4
SELECT
CAST ('2015-01-01' AS DATE),
CAST ('01-OCT-2015' AS DATE),
'2019-06-15 14:30:20'::date;

결과는 아래와 같습니다. Date를 사용하면 날짜의 년도, 월, 일만 표시되고 시간 형식은 표시되지 않습니다.

date date date
2015-01-01 2015-10-01 2019-06-15



3)문자를 더블형으로 변환

1
2
SELECT
CAST ('10.2' AS DOUBLE);

만약 위와 같이 쿼리문을 실행하면 SQL Error [42704]: 오류: "double" 자료형 없음 이라는 오류가 발생합니다.
오류를 고치기 위해서는 ‘double’ 대신에 DOUBLE PRECISION를 사용해주면 됩니다.

1
2
SELECT
CAST ('10.2' AS DOUBLE PRECISION);

결과는 아래와 같습니다.

float8
10.2



4)문자를 참거짓으로 변환

1
2
3
4
5
SELECT
CAST('true' AS BOOLEAN),
CAST('false' as BOOLEAN),
CAST('T' as BOOLEAN),
CAST('F' as BOOLEAN);

결과는 아래와 같습니다.

bool bool bool bool
true false true false



5)문자를 날짜, 시간 형식으로 변환

1
2
SELECT '2019-06-15 14:30:20'::timestamp,
'2019-06-15'::timestamp;

결과는 아래와 같습니다. 변환시에 시간을 지정하지 않아도 시간이 붙은 결과로 나옵니다.

timestamp timestamp
2019-06-15 14:30:20 2019-06-15 00:00:00



6)문자를 인터벌 형식으로 변환

1
2
3
4
5
SELECT '15 minute'::interval,
'2 hour'::interval,
'1 day'::interval,
'2 week'::interval,
'3 month'::interval;

결과는 아래와 같습니다.

interval interval interval interval interval
00:15:00 02:00:00 1 day 14 days 3 mons

Reference
Share