INT(INTEGER), BIGINT, FLOAT, DOUBLE 정도만 알아두자
추가로 알아두면 좋을 것
숫자 앞에 부호가 있는 것 Signed
숫자 앞에 부호가 없는 것 unsigned
CAST (expression AS 데이터형식 [(길이)])
CONVERT (expression, 데이터형식 [(길이)])
-- 명시적 형변환
SELECT AVG(menu_price) from tbl_menu;
-- 1) 숫자 -> 숫자
-- 소수점에서 반올림해서 정수까지 변환
SELECT CAST(AVG(menu_price) AS UNSIGNED INTEGER) AS '가격평균' FROM tbl_menu;
-- 소수점 이하 한자리까지 변환
SELECT CAST(AVG(menu_price) AS FLOAT) AS '가격평균' FROM tbl_menu;
-- 소수점 이하 12자리까지 변환
SELECT CAST(AVG(menu_price) AS DOUBLE) AS '가격평균' FROM tbl_menu;
-- 2) 문자 -> 날짜
-- 2023년 12월 27일을 date형으로 변환
SELECT CAST('2023$12$27' AS DATE);
SELECT CONVERT('2023/12/27', DATE);
SELECT CONVERT('2023-12-27', DATE);
SELECT CONVERT('2023#12#27', DATE);
-- 특수기호 기준으로 날짜를 만듬
-- 3) 숫자 -> 문자
SELECT CONCAT(CAST(1000 AS CHAR), '원');
SELECT CAST(menu_price AS CHAR(5)) FROM tbl_menu; -- 문자로 변환하여 결과 추출
SELECT CONCAT(CAST(menu_price AS CHAR(5)), '원') FROM tbl_menu;-- 앞에 있는 문자와 뒤에 있는 문자 합쳐서 문자로 변환 후 결과 추출
SELECT '1' + '2'; -- 각 문자가 정수로 변환됨
SELECT CONCAT(menu_price, '원') FROM tbl_menu; -- menu_price가 문자로 변환됨
SELECT 3 > 'MAY'; -- 문자는 0으로 변환된다.
-- 암시적 형변환
-- 연산자 사용시 자동으로 형변환이 되는데 주의해야 함
SELECT 1 + '2'; -- '2'가 숫자 2로 변환
SELECT '1' + '2'; -- 모든 문자는 산술연산 또는 비교연산을 만나면 0이 된다. 해결하려면 'CONCAT('1' + '2');' 이용하자.
SELECT '안녕' + '하세요'; -- 모든 문자는 산술연산 또는 비교연산을 만나면 0이 된다.
SELECT 5 > '반가워'; -- true의 의미인 1이 변환된다.