CAST 의 사용법
CAST(원래 데이터 AS 변환할데이터타입)
형태로 사용할 수 있습니다.
1
2
3
4
SELECT CAST(col1 AS INTEGER) FROM tbl_1 // 정수형으로 변환
SELECT CAST(col2 AS CHAR) FROM tbl_1 // 문자형으로 변환
SELECT CAST(col3 AS DECIMAL) FROM tbl_1 // 숫자형(소수점까지)으로 변환
...
위 예시 외에도 다양한 형태로 변환할 수 있습니다.
- BINARY : 이진 데이터
- CHAR : 문자열(문자형)
- DATE : 날짜(연월일)
- DATETIME : 날짜(연월일 시분초)
- TIME : 시간
- DECIMAL : 숫자형(소수점까지)
- JSON : JSON 형태
- NCHAR : 문자열(문자형), 글자수 기준
- SIGNED [INTEGER] : 부호가 있는 정수
- UNSIGNED [INTEGER] : 부호가 없는 정수(양의 정수)
사용 예시
이전 포스트에서 들었던 예시를 가져와보겠습니다.
column 타입은 문자형이지만, 안에 들어있는 값은 숫자형인 경우들이 있습니다.
이 때 숫자간의 대소를 비교해야한다면?
CAST AS 구문을 사용할 수 있습니다.
CAST AS 구문으로 문자형인 데이터를 숫자형으로 변환하여 비교하는 것이죠.
예시 데이터
name | subject | score |
---|---|---|
김철수 | 영어 | 85 |
이철수 | 수학 | 120 |
남궁철수 | 물리 | 100 |
베르나르철수 | 문학 | 95 |
table : std_score
name : varchar(20)
subject : varchar(20)
score : varchar(20)
먼저, 문자형인 숫자를 변환 없이 비교할 경우입니다.
1
2
SELECT max(score) FROM std_score;
>>> 95
분명 최대 점수인 120점이 나와야 할 것 같은데.. 95점이라니!
이는 score 컬럼이 varchar 즉, 문자형이기 때문입니다.
따라서 정렬상 가장 마지막에 있는 95점이 반환되는 것이죠.
이번엔 CAST AS를 통해 숫자로 변환한 뒤 비교해보겠습니다.
1
2
SELECT max(CAST(score AS INTEGER)) FROM std_score;
>>> 120
문자형인 score 컬럼의 값들을 INTEGER로 변환(CAST) 한 뒤 비교하기 때문에, 숫자 중 최대값인 120이 반환되는 것을 볼 수 있습니다.
Reference
- CAST : https://hajoung56.tistory.com/19
- CAST : https://inpa.tistory.com/entry/
- signed, unsigned : https://blog.naver.com/jamduino/220896370892