🧚 お知らせ!Beekeeper Studioは高速でモダンなオープンソースのデータベースGUIです ダウンロード
2025年7月2日 著者: Matthew Rathbone

SQLで日付を挿入するには、INSERT文の中で 'YYYY-MM-DD' 形式の文字列として記述するか、今日の日付であれば CURRENT_DATE などの関数を使います。例はPostgreSQL、MySQL、SQLite、SQL Serverで動作します。

SQLで日付を挿入する方法

日付を 'YYYY-MM-DD' 形式の文字列で記述します。カラムが日付型であれば、データベースが文字列を日付に変換します。

INSERT INTO table_name (date_column) VALUES ('YYYY-MM-DD');
INSERT INTO orders (order_id, customer, order_date)
VALUES (2, 'Tom', '2021-06-15');

TIMESTAMP や DATETIME カラムの場合は、スペースの後に24時間表記で時刻を追加します。

INSERT INTO flights (flight_no, departs_at)
VALUES ('UA 940', '2026-11-02 17:45:00');
-- In SQL Server, make departs_at a DATETIME2: its TIMESTAMP type isn't a date

今日の日付を入れるには、文字列の代わりに引用符なしで CURRENT_DATE を記述します。CURRENT_TIMESTAMP は日付と時刻を返します。

INSERT INTO orders (order_id, customer, order_date)
VALUES (3, 'Priya', CURRENT_DATE);
-- In SQL Server, use CAST(GETDATE() AS DATE): it has no CURRENT_DATE

-- Output (the new row, run on 2026-10-13):
-- order_id | customer | order_date
-- ---------+----------+-----------
-- 3        | Priya    | 2026-10-13

知っておくべきルール

  • 'YYYY-MM-DD' を使いましょう。それ以外の形式はデータベースの設定に依存します。PostgreSQLとSQL Serverは '06/15/2021' を月/日/年として解釈し、MySQLはエラーにします。
INSERT INTO orders (order_id, customer, order_date) VALUES (4, 'Ana', '06/15/2021');
-- MySQL: ERROR 1292 (22007): Incorrect date value: '06/15/2021' for column 'order_date' at row 1
  • SQLiteは日付をチェックしません。日付型がなく、渡されたテキストをそのまま保存します。日付関数は '06/15/2021' を読み取れず、'2021-02-30' は 2021-03-02 に繰り越されます。
  • MySQLの TIMESTAMP は1970年から2038年までしか扱えません。誕生日や過去の日付、遠い未来の日付には DATETIME を使います。
-- MySQL
CREATE TABLE people (name VARCHAR(50), born_at TIMESTAMP);
INSERT INTO people (name, born_at) VALUES ('Ada Lovelace', '1815-12-10 00:00:00');
-- ERROR 1292 (22007): Incorrect datetime value: '1815-12-10 00:00:00' for column 'born_at' at row 1
  • 「現在」はデータベースのタイムゾーンになります(SQLiteでは常にUTC)。ユーザーが複数のタイムゾーンにいる場合は、UTCで保存しましょう。

別の構文

各データベース独自の「今日」と「現在」の関数もよく見かけます。

  • MySQL: CURDATE() と NOW()。PostgreSQLにも NOW() があります。
  • SQLite: date('now') と datetime('now')。
  • SQL Server: CAST(GETDATE() AS DATE) と GETDATE()。CURRENT_DATE がないため、今日の日付にはキャストが必要です。

日付を挿入するのはどんなとき?

日付の挿入はほとんどが次の5つのケースのいずれかで、それぞれに適した方法があります。

既に分かっている日付を記録する

誕生日、期日、予約日などは人やフォームから入力されます。'YYYY-MM-DD' 形式の文字列で記述します。

今日の日付や現在時刻を記録する

注文日、登録日、監査ログは、誰かが入力した値ではなくデータベースの時計から取得すべきです。CURRENT_DATE または CURRENT_TIMESTAMP(SQL Serverでは GETDATE())を使うか、カラムのデフォルト値に設定します。

日付と一緒に時刻も保存する

会議、フライト、ログエントリには時刻も必要です。DATETIME または TIMESTAMP カラムを使い、'YYYY-MM-DD HH:MM:SS' と記述します。

別の日付から日付を計算する

期日、更新日、リマインダーは、別の日付から一定期間後になります。計算はデータベースに任せましょう。PostgreSQLとMySQLでは + INTERVAL、SQL Serverでは DATEADD()、SQLiteでは修飾子付きの date() を使います。

別の形式で書かれた日付を読み込む

スプレッドシートやCSVエクスポートには 06/15/2021 のような日付がよく含まれます。挿入時に変換しましょう。MySQLでは STR_TO_DATE()、PostgreSQLでは TO_DATE()、SQL Serverではスタイル番号付きの CONVERT() を使います。SQLiteは他の形式を解析できないため、substr() でテキストを並べ替えます。

日付挿入の実例

1つの文で複数の日付を追加する

祝日のリストは、1つのINSERTと日付ごとの値の行で登録できます。

INSERT INTO holidays (holiday_name, holiday_date)
VALUES
  ('Independence Day', '2026-07-04'),
  ('Thanksgiving', '2026-11-26'),
  ('Christmas Day', '2026-12-25');

デフォルト値で今日の日付を入れる

カラムにデフォルト値を設定すると、そのカラムを省略したINSERTには今日の日付が入ります。MySQLでは CURRENT_DATE を括弧で囲む必要があります。

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_date DATE DEFAULT (CURRENT_DATE)  -- SQL Server: DEFAULT CAST(GETDATE() AS DATE)
);

INSERT INTO orders (order_id, customer_id) VALUES (1, 42);

-- Output (the new row, run on 2026-10-13):
-- order_id | customer_id | order_date
-- ---------+-------------+-----------
-- 1        | 42          | 2026-10-13

ローカルの会議時刻をUTCで保存する

ニューヨークにいる人が現地時間の午前9:30に会議を予約したとします。挿入時にUTCに変換すれば、全員の時刻が揃います。

INSERT INTO meetings (title, starts_at_utc)
VALUES ('Design review', TIMESTAMP '2026-10-20 09:30:00' AT TIME ZONE 'America/New_York' AT TIME ZONE 'UTC');
-- MySQL (once its time zone tables are loaded):
--   CONVERT_TZ('2026-10-20 09:30:00', 'America/New_York', 'UTC')
-- SQL Server:
--   CAST('2026-10-20 09:30:00' AS DATETIME2) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC'

-- Output (the new row):
-- title         | starts_at_utc
-- --------------+--------------------
-- Design review | 2026-10-20 13:30:00

SQLiteには名前付きタイムゾーンがないため、挿入前にアプリケーション側で変換してください。

1か月後の更新日を設定する

サブスクリプションは開始から1か月後に更新されます。INSERTの中で更新日を計算しましょう。

INSERT INTO subscriptions (customer, started_on, renews_on)
VALUES ('Tom', '2026-10-13', DATE '2026-10-13' + INTERVAL '1' MONTH);
-- SQL Server: DATEADD(month, 1, '2026-10-13')
-- SQLite:     date('2026-10-13', '+1 month')

-- Output (the new row):
-- customer | started_on | renews_on
-- ---------+------------+-----------
-- Tom      | 2026-10-13 | 2026-11-13

SQLiteでは月末に注意してください。1月31日からだと3月にあふれてしまいますが、他のデータベースでは2月28日で止まります。

SELECT date('2026-01-31', '+1 month');
-- Output: 2026-03-03

日/月/年形式の日付をインポートする

仕入先から英国式の 15/06/2021 という日付の請求書が届いたとします。挿入時にデータベースへ形式を指定します。

INSERT INTO invoices (invoice_no, issued_on)
VALUES ('INV-1002', TO_DATE('15/06/2021', 'DD/MM/YYYY'));
-- MySQL:      STR_TO_DATE('15/06/2021', '%d/%m/%Y')
-- SQL Server: CONVERT(date, '15/06/2021', 103), where style 103 is dd/mm/yyyy
-- SQLite can't parse dates: rearrange the text with substr()

-- Output (the new row):
-- invoice_no | issued_on
-- -----------+-----------
-- INV-1002   | 2021-06-15

日付の挿入に関する参考資料

このブログの記事:

公式ドキュメント:

Beekeeper Studioは無料のオープンソースのデータベースGUIです

これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper Studio 利用者の声

★★★★★
「Beekeeper Studioは、以前のSQLワークフローを完全に置き換えました。高速で直感的で、データベース作業がまた楽しくなりました。」
— Alex K.、データベース開発者
★★★★★
「多くのデータベースGUIを試しましたが、Beekeeperは機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」
— Sarah M.、フルスタックエンジニア