파란하늘의 지식창고
반응형
db에 시간에 대해 저장할 때 datetime과 unixtime 두 가지 방식 중 하나를 이용하여 저장한다.

다음과 같은 query가 datetime 컬럼에 대해 실행되면 어떻게 될까?
INSERT 테이블 (날짜컬럼) values(0)

위의 경우 datetime 형식 컬럼에는 '1900-01-01 00:00:00.000'이 저장된다.
만약 int값을 0이 아닌 값으로 실행하면 어떻게 될까?
INSERT 테이블 (날짜컬럼) values(1)

위의 경우 datatime 형식 컬럼에는 '1900-01-02 00:00:00.000'이 저장된다.
즉 숫자형의 값을 datetime 컬럼에 입력하면 '1900-01-01 00:00:00.000'을 기준으로 day가 증가 또는 감소한 값이 저장된다.

unixtime은 '1970-01-01 00:00:00'으로 부터 초/분단위로 데이터를 저장하는 형식이지만 특정한 데이터 타입으로 존재하는 것은 아니다.
따라서 초단위 이하까지의 디테일한 데이터가 필요하지 않을 경우 위의 특성을 이용하여 분단위 저장을 하는 것도 나쁘지 않다.

unixtime으로 초/단위 저장을 할 경우 아래와 같이 저장을 한다.
INSERT 테이블 VALUES ('[1970-01-01 00:00:00.000 으로 부터 지난 초/분 숫자])

이러한 unixtime으로 저장을 하게 되면 4byte의 값으로 8byte의 datetime의 값을 저장할 수 있다는 장점이 있다.
1970-01-01 00;00:00.000분으로 부터 지난 초/분을 구하려면 datediff 함수를 사용하면 된다.

select datediff(second, '1970-01-01 00:00:00.000', [구하려는날짜])
select datediff(minute, '1970-01-01 00:00:00.000', [구하려는날짜])

이렇게 unixtime으로 변경된 시간을 다시 datetime 형식으로 구하려면 dateadd 함수를 사용하여 기준이 되는 날짜로 부터 더해진 초/분을 계산하면 된다.
select dateadd(second, [unixtime 값], '1970-01-01 00:00:00.000')
select dateadd(minute, [unixtime 값], '1970-01-01 00:00:00.000')
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요