타임스탬프 자료

SQL 타임스탬프 함수 참조

SQL 타임스탬프 함수 참조

널리 사용되는 데이터베이스 시스템 전반의 타임스탬프 작업에 대한 빠른 참조입니다.

현재 타임스탬프

데이터베이스현재 타임스탬프(UTC)현재 타임스탬프(로컬)
MySQLNOW(), UTC_TIMESTAMP()NOW(), LOCALTIMESTAMP()
PostgreSQLNOW(), CURRENT_TIMESTAMPNOW(), CURRENT_TIMESTAMP
SQLite날짜시간('지금')날짜시간('현재', '현지시간')
SQL 서버GETUTCDATE()GETDATE(), SYSDATETIME()
오라클SYSTIMESTAMP, SYS_EXTRACT_UTC(SYSTIMESTAMP)SYSTIMESTAMP

유닉스 타임스탬프 작업

현재 Unix 타임스탬프 가져오기

데이터베이스코드
MySQLUNIX_TIMESTAMP()
PostgreSQL추출(현재_TIMESTAMP에서 에포크)
SQLitestrftime('%s', '지금')
SQL 서버DATEDIFF(s, '1970-01-01', GETUTCDATE())
오라클(SYSTIMESTAMP - TO_TIMESTAMP('1970-01-01', 'YYYY-MM-DD')) * 86400

Unix 타임스탬프를 날짜로 변환

데이터베이스코드
MySQLFROM_UNIXTIME(1704067200)
PostgreSQLTO_TIMESTAMP(1704067200)
SQLitedatetime(1704067200, 'unixepoch')
SQL 서버DATEADD(s, 1704067200, '1970-01-01')
오라클TO_DATE('1970-01-01', 'YYYY-MM-DD') + (1704067200 / 86400)

날짜를 Unix 타임스탬프로 변환

데이터베이스코드
MySQLUNIX_TIMESTAMP('2024-01-01 00:00:00')
PostgreSQL추출('2024-01-01 00:00:00'::타임스탬프의 EPOCH)
SQLitestrftime('%s', '2024-01-01 00:00:00')
SQL 서버DATEDIFF(s, '1970-01-01', '2024-01-01 00:00:00')
오라클TO_CHAR('2024-01-01 00:00:00', 'J') - TO_CHAR(DATE '1970-01-01', 'J')) * 86400

날짜 형식

일반적인 날짜 형식

데이터베이스ISO 8601미국 형식EU 형식
MySQLDATE_FORMAT(NOW(), '%Y-%m-%dT%H:%i:%s')DATE_FORMAT(NOW(), '%m/%d/%Y')DATE_FORMAT(NOW(), '%d/%m/%Y')
PostgreSQLTO_CHAR(NOW(), 'YYYY-MM-DD"T"HH24:MI:SS')TO_CHAR(NOW(), 'MM/DD/YYYY')TO_CHAR(NOW(), 'DD/MM/YYYY')
SQLitedatetime('지금', 'iso8601')--
SQL 서버FORMAT(GETUTCDATE(), 'yyyy-MM-ddTHH:mm:ss')FORMAT(GETDATE(), 'MM/dd/yyyy')FORMAT(GETDATE(), 'dd/MM/yyyy')
오라클TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS')TO_CHAR(SYSDATE, 'MM/DD/YYYY')TO_CHAR(SYSDATE, 'DD/MM/YYYY')

시간대 작업

현재 시간대 가져오기

데이터베이스코드
MySQLTIMEZONE_NAME, @@time_zone
PostgreSQL현재_설정('시간대')
SQLite해당 없음(시간대 지원 안 함)
SQL 서버GETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET())
오라클SESSIONTIMEZONE, DBTIMEZONE

시간대 변환| 데이터베이스 | 코드 |

|------------|------| | MySQL | CONVERT_TZ('2024-01-01 12:00:00', 'UTC', 'America/New_York') | | PostgreSQL | ``2024-01-01 12:00:00 UTC'::timestamptz AT TIME ZONE 'America/New_York'| | **SQLite** | 해당 없음 | | **SQL 서버** |GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE '동부 표준시'| | **오라클** |FROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') AT TIME ZONE 'America/New_York'` |

타임스탬프 산술

시간 더하기/빼기

데이터베이스1일 추가1시간 빼기
MySQLDATE_ADD(NOW(), 간격 1일)DATE_SUB(지금(), 간격 1시간)
PostgreSQLNOW() + 간격 '1일'NOW() - 간격 '1시간'
SQLitedatetime('지금', '+1일')datetime('지금', '-1시간')
SQL 서버DATEADD(일, 1, GETDATE())DATEADD(시, -1, GETDATE())
오라클SYSDATE + 1SYSDATE - (1/24)

차이 계산

데이터베이스일 사이
MySQLDATEDIFF('2024-01-15', '2024-01-01')
PostgreSQL``2024-01-15'::날짜 - '2024-01-01'::날짜`
SQLitejulianday('2024-01-15') - julianday('2024-01-01')
SQL 서버DATEDIFF(일, '2024-01-01', '2024-01-15')
오라클TO_DATE('2024-01-15') - TO_DATE('2024-01-01')

모범 사례

1. 타임스탬프를 UTC로 저장

타임스탬프는 항상 UTC 형식으로 저장하고 사용자에게 표시할 때만 현지 시간으로 변환하세요.

-- Good: Store in UTC
CREATE TABLE events (
    id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Better: Explicit UTC
CREATE TABLE events (
    id INT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

2. 적절한 데이터 유형을 사용하세요

사용 사례권장 유형
UTC 저장시간대를 포함한 타임스탬프
현지 시간에만시간대 없는 타임스탬프
유닉스 타임스탬프BIGINT(이식성용)
날짜만날짜

3. 시간대 변환을 적절하게 처리

-- PostgreSQL example
SELECT
    created_at AT TIME ZONE 'UTC' AS utc_time,
    created_at AT TIME ZONE 'America/New_York' AS ny_time,
    created_at AT TIME ZONE 'Asia/Shanghai' AS shanghai_time
FROM events;

관련 도구