DB/SQL

[세무민의 코딩일기] DATE -> INT 변환과 쿼리에서 SET으로 날짜 변수 선언하기(형 변환)

세기루민 2021. 7. 26. 13:00
728x90

이번 포스팅에서 다뤄볼 내용은 SET입니다.

단순히 SET만 사용할 것은 아니고 형변환도 같이 다뤄볼 계획입니다.

https://sg-moomin.tistory.com/entry/%EC%84%B8%EB%AC%B4%EB%AF%BC%EC%9D%98-%EC%BD%94%EB%94%A9%EC%9D%BC%EA%B8%B0-%EC%83%88%EB%A1%9C-%EB%A7%8C%EB%93%A4-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%97%90-%EA%B8%B0%EC%A1%B4-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%9D%98-%EA%B0%92%EC%9D%84-insert-%ED%95%98%EB%8A%94-Tip

 

[세무민의 코딩일기] 새로 만들 테이블에 기존 테이블의 값을 insert 하는 Tip

이번 포스팅에서는 auto_increment와 insert에 대해서 간략하게 다뤄볼 계획입니다. 사실 auto_increment라는건 대부분 알 것입니다. 테이블을 생성 시 정수 primary key값을 가지는 컬럼에 되어있는 경우가

sg-moomin.tistory.com

내용을 다뤄보기 전에 기존에 사용했던 테이블에 대해서는 전 포스팅에서 사용한 테이블로 진행합니다.


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 :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions

12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats

dev.mysql.com

자세한 사항들은 위의 레퍼런스를 참조하면 확인이 가능하고 참조한 레퍼런스는 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에서 필수인 내장함수에 대해서 다뤄보도록 하겠습니다.

728x90