이번 포스팅에서 다뤄볼 내용은 SET입니다.
단순히 SET만 사용할 것은 아니고 형변환도 같이 다뤄볼 계획입니다.
내용을 다뤄보기 전에 기존에 사용했던 테이블에 대해서는 전 포스팅에서 사용한 테이블로 진행합니다.
1. SET을 이용한 변수 활용
먼저 일반적으로 SQL에서도 변수를 사용하고 쓸수 있습니다.
변수를 사용하는 방법은 아래와 같습니다.
SET @변수이름 = 값
SELECT @변수이름
위의 경우로 사용합니다.
예시를 들어서 보여드리도록 하겠습니다.
SELECT @TIME_NOWS := '2021-07-26 12:22:59.111';
SELECT CAST(@TIME_NOWS AS DATE) AS 'DATE'
,CAST(@TIME_NOWS AS TIME) AS 'TIEM'
,CAST(@TIME_NOWS AS DATETIME) AS 'DATETIME';
변수를 선언해준 뒤에 해당 변수를 DATE, TIME, DATETIME 타입으로 변환해줬다.
변환을 해주면 위와 같은 값을 가질 수 있다.
여기서 변수를 사용하는 이유를 알 수 있다.
만약에 변수를 사용하지 않았다면 직접 날짜를 하나씩 다 복사 붙여넣기를 해야하고
나중에 코드 수정시에 매우 힘들 수 있다.
변수를 사용하지 않고 FIX를 했다면 하드코딩을 하게 된 샘이다.
2. CAST와 데이터 형식
위에서 봤던 CAST에 대해서 잠깐 집고 넘어가볼 계획이다.
CAST는 가장 일반적으로 사용하고 있는 데이터 형 변환에 사용되는 함수이다.
예를 들어서 보도록 하겠습니다.
-- 데이터 형식 변환
SELECT CAST(avg(NUMBER1) as JSON) as '평균 합계 JSON'
,CONVERT(AVG(NUMBER1), decimal) AS '평균 합계(소수)' FROM TEMP1;
위와 그림과 코드처럼 데이터의 형을 변환할 때 사용할 수 있다.
CONVERT의 경우는 CAST와 동일하게 자주 사용하는 형식 변환 함수이다.
데이터 형변환에 가능한 형식을 간단하게 나열해보면 아래와 같다.
- BINARY, CHAR, DATA, DATATIME, DECIMAL, JSON, SIGNED, INTERGER, TIME, UNSIGNED INTEGER
SELECT CAST('2021!11@20' AS DATE);
TIP : 날짜를 구분할때는 아래와 같이 구분자로 날짜를 구분할 수도 있다.
3. DATA -> INT
CAST에 대해서 알았는데 오라클에서는 DATE형식을 TO_CHAR, TO_NUMBER로 자유롭게 변경이 가능하다.
그렇지만 MYSQL은 그렇게 자유롭게 변경이 되지 않는데 DATA를 INT 형태로 변경하는 방법을 마지막으로 소개하겠다.
# DATA -> INT
SELECT UNIX_TIMESTAMP(@TIME_NOWS);
# CONCAT
SELECT CONCAT(@TIME_NOW + @TIME_NOWS);
SELECT CONCAT(UNIX_TIMESTAMP(@TIME_NOWS) + @TIME_NOW);
먼저 DATA -> INT로 변환하기 위해서는 UNIX_TIMESTAMP를 이용하면 된다.
조회를 했을 경우 위와 같이 결과가 나타나게 된다.
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_unix-timestamp
자세한 사항들은 위의 레퍼런스를 참조하면 확인이 가능하고 참조한 레퍼런스는 MYSQL 8.0을 참조했다.
마지막으로는 UNIX_TIMESTAMP를 이용해서 CONCAT으로 값을 더하는 예시를 보여드리겠습니다.
SELECT CONCAT(@TIME_NOW + @TIME_NOWS);
SELECT CONCAT(UNIX_TIMESTAMP(@TIME_NOWS) + @TIME_NOW);
CONCAT은 문자와 문자를 연결해주는 함수입니다.
위의 TIME_NOW와 TIME_NOWS를 합하면 아래와 같은 결과가 나옵니다.
이를 통해서 알 수 있는건 DATA 값의 연도를 문자열로 인식해서
TIME_NOW의 15값과 TIME_NOWS의 2021을 더해주는 것으로 알 수 있다.
두번째 코드처럼 더해준다면 DATA값을 INT로 변한 값에 15가 더해지는 것을 확인할 수 있습니다.
오늘 포스팅에서는 UNIX_TIMESTAMP와 SET 그리고 CAST에 대해서 다뤄봤습니다.
다음에는 SQL에서 필수인 내장함수에 대해서 다뤄보도록 하겠습니다.
'DB > SQL' 카테고리의 다른 글
[세무민의 코딩일기] SQL 내장함수에 대해서 알아보자 2탄!(문자열 공백 제거와 문자열 쪼개기) (0) | 2021.07.28 |
---|---|
[세무민의 코딩일기] SQL 내장함수에 대해서 알아보자 1탄!(길이, 진법변환, 문자열 반환 등) (0) | 2021.07.27 |
[세무민의 코딩일기] 새로 만들 테이블에 기존 테이블의 값을 insert 하는 Tip (0) | 2021.07.25 |
[세무민의 코딩일기] 쿼리 with rollup 으로 중간 합계 구하는 방법! (0) | 2021.07.24 |
[세무민의 코딩일기] 쉬우면서 어려운 집계함수에 대해서 알아보자! (0) | 2021.07.22 |