タイムスタンプ資料

SQL タイムスタンプ関数リファレンス

SQL タイムスタンプ関数リファレンス

一般的なデータベース システム全体でのタイムスタンプ操作のクイック リファレンス。

現在のタイムスタンプ

データベース現在のタイムスタンプ (UTC)現在のタイムスタンプ (ローカル)
MySQLNOW()UTC_TIMESTAMP()NOW()LOCALTIMESTAMP()
PostgreSQLNOW()CURRENT_TIMESTAMPNOW()CURRENT_TIMESTAMP
SQLitedatetime('now')datetime('now', 'localtime')
SQL サーバーGETUTCDATE()GETDATE()SYSDATETIME()
オラクルSYSTIMESTAMPSYS_EXTRACT_UTC(SYSTIMESTAMP)SYSTIMESTAMP

Unix タイムスタンプ操作

現在の Unix タイムスタンプを取得する

データベースコード
MySQLUNIX_TIMESTAMP()
PostgreSQLEXTRACT(CURRENT_TIMESTAMP からのエポック)
SQLitestrftime('%s', 'now')
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')
PostgreSQLEXTRACT(EPOCH FROM '2024-01-01 00:00:00'::timestamp)
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

日付の書式設定

一般的な日付形式

データベースISO8601米国形式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('now', '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
PostgreSQLcurrent_setting('タイムゾーン')
SQLite該当なし (タイムゾーンはサポートされていません)
SQL サーバーGETDATE(), DATENAME(TIMEZONE, SYSDATETIMEOFFSET())
オラクルSESSIONTIMEZONEDBTIMEZONE

タイムゾーンを変換する|データベース |コード |

|----------|------| | MySQL | CONVERT_TZ('2024-01-01 12:00:00', 'UTC', 'アメリカ/ニューヨーク') | | 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 'Eastern Standard Time' | | オラクル | FROM_TZ(TIMESTAMP '2024-01-01 12:00:00', 'UTC') AT TIME ZONE 'アメリカ/ニューヨーク' |

タイムスタンプ演算

時間の加算/減算

データベース1 日追加1 時間を減算する
MySQLDATE_ADD(NOW(), INTERVAL 1 DAY)DATE_SUB(NOW(), 間隔 1 時間)
PostgreSQLNOW() + 間隔 '1 日'NOW() - 間隔 '1 時間'
SQLitedatetime('now', '+1 day')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'::日付
SQLiteジュリアンデー('2024-01-15') - ジュリアンデー('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 ストレージタイムゾーン付きタイムスタンプ
現地時間のみタイムゾーンなしのタイムスタンプ
Unix タイムスタンプ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;

関連ツール