반응형
SQL에서 날짜를 더하고 빼는 연산식에서 보통은 INTERVAL 함수를 사용합니다.
하지만 일반적으로 INTERVAL함수에는 '1 HOUR' 처럼 지정하여 사용할 수 있게 되어 있습니다.
변수를 사용하고자 CAST함수를 이용하는 방법을 정리해보았습니다.
보통의 쿼리의 경우는 아래와 같습니다.
INTERVAL 사용 예
1
2
3
4
5
|
SELECT
date - INTERVAL '1 HOUR' AS TIME
FROM
date_table
|
cs |
이렇게 하면 한시간을 빼는 결과식이 나오게 됩니다.
INTERVAL 잘못된 변수 사용
하지만 1 대신 변수를 집어 넣고 싶은 경우가 생기게 됩니다.
이렇게 말이죠.
1
2
3
4
5
|
SELECT
date - INTERVAL time 'HOUR' AS TIME
FROM
date_table
|
cs |
time이란 변수를 1대신 넣고 싶지만 아래와 같은 구문 에러가 발생하게 됩니다.
다른 방법이 필요할 것 같네요..
ERROR: syntax error at or near "'HOUR'"
반응형
INTERVAL 변수 사용 방법
1
2
3
4
5
|
SELECT
date - cast(time || 'hour' as INTERVAL) AS TIME
FROM
date_table
|
cs |
해결방법은 바로 cast 함수를 사용하는 방식입니다.
cast 함수는 데이터형식을 다른 데이터형식으로 변환하는 역활을 하는데,
||을 이용하여 문자열끼리 연결하고 데이터형식을 INTERVAL로 변환해주는 방법입니다.
사용 예시
1
2
3
4
5
6
|
SELECT
TO_CHAR(TO_TIMESTAMP(CONCAT(date, ' ' ,time),'YYYY-MM-DD HH24:MI:SS') - cast(time_zone || 'hour' as INTERVAL) , 'YYYY-MM-DD HH24:MI:SS') AS TIME ,
CONCAT(date, ' ' ,time) AS refrence,
FROM
date_table
|
cs |
저 같은 경우는 date와 time의 각각의 컬럼을 붙여서 데이터 형식으로 변환한 뒤,
time_zone의 컬럼을 이용하여 INTERVAL로 시간 계산한 방식입니다.
반응형
'Database' 카테고리의 다른 글
[MySQL] slow_queries.log 효율적인 검색 방법 (1) | 2024.04.24 |
---|---|
[SQL] Insert 후 인덱스 값 가져오는법 (Mybatis&Ibatis) (0) | 2022.07.14 |
[MYSQL] 계정 및 권한 생성 방법!! (0) | 2021.12.20 |
[Query] Join 속도 개선 방법 (feat. SubQuery) (0) | 2021.04.13 |
[MYSQL] 더미데이터 생성 쿼리!! (0) | 2021.03.31 |
댓글