Untuk menyisipkan tanggal di SQL, tulis tanggal di statement INSERT Anda sebagai string 'YYYY-MM-DD', atau gunakan fungsi seperti CURRENT_DATE untuk tanggal hari ini. Contoh-contohnya berlaku di PostgreSQL, MySQL, SQLite, dan SQL Server.
Cara menyisipkan tanggal di SQL
Tulis tanggal sebagai string dalam format 'YYYY-MM-DD'. Jika kolomnya bertipe tanggal, database akan mengubah string tersebut menjadi tanggal:
INSERT INTO table_name (date_column) VALUES ('YYYY-MM-DD');
INSERT INTO orders (order_id, customer, order_date)
VALUES (2, 'Tom', '2021-06-15');
Untuk kolom TIMESTAMP atau DATETIME, tambahkan waktu setelah spasi, dengan format 24 jam:
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
Untuk tanggal hari ini, letakkan CURRENT_DATE di posisi string, tanpa tanda kutip. CURRENT_TIMESTAMP memberikan tanggal sekaligus waktu:
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
Aturan yang perlu diketahui
-
Gunakan selalu
'YYYY-MM-DD'. Format lain bergantung pada pengaturan database. PostgreSQL dan SQL Server membaca'06/15/2021'sebagai bulan/hari/tahun, sedangkan MySQL menolaknya:
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 tidak memeriksa tanggal. SQLite tidak punya tipe tanggal dan menyimpan teks apa pun yang Anda berikan. Fungsi tanggalnya tidak bisa membaca
'06/15/2021', dan mengubah'2021-02-30'menjadi2021-03-02. -
TIMESTAMPdi MySQL hanya mencakup tahun 1970 hingga 2038. GunakanDATETIMEuntuk tanggal lahir, tanggal historis, dan apa pun yang jauh di masa depan:
-- 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
- “Sekarang” mengikuti zona waktu database (selalu UTC di SQLite). Jika pengguna Anda berada di lebih dari satu zona waktu, simpan dalam UTC.
Sintaks alternatif
Anda juga akan menemukan nama khusus tiap database untuk hari ini dan saat ini:
- MySQL:
CURDATE()danNOW(). PostgreSQL juga punyaNOW(). - SQLite:
date('now')dandatetime('now'). - SQL Server:
CAST(GETDATE() AS DATE)danGETDATE(). SQL Server tidak punyaCURRENT_DATE, jadi tanggal hari ini perlu di-cast.
Kapan Anda perlu menyisipkan tanggal?
Sebagian besar insert tanggal termasuk salah satu dari lima kebutuhan ini, dan masing-masing punya caranya sendiri.
Mencatat tanggal yang sudah diketahui
Tanggal lahir, tenggat, dan janji temu berasal dari seseorang atau formulir. Ketik sebagai string 'YYYY-MM-DD'.
Mencatat tanggal hari ini atau waktu saat ini
Tanggal pesanan, tanggal pendaftaran, dan log audit sebaiknya diambil dari jam database, bukan dari nilai yang diketik seseorang. Gunakan CURRENT_DATE atau CURRENT_TIMESTAMP (GETDATE() di SQL Server), atau jadikan salah satunya default kolom.
Menyimpan waktu beserta tanggal
Rapat, penerbangan, dan entri log juga butuh waktu. Gunakan kolom DATETIME atau TIMESTAMP dan tulis 'YYYY-MM-DD HH:MM:SS'.
Menghitung tanggal dari tanggal lain
Tenggat, perpanjangan, dan pengingat jatuh pada jangka waktu tertentu setelah tanggal lain. Biarkan database yang menghitung: + INTERVAL di PostgreSQL dan MySQL, DATEADD() di SQL Server, dan date() dengan modifier di SQLite.
Memuat tanggal dalam format lain
Spreadsheet dan ekspor CSV sering berisi tanggal seperti 06/15/2021. Konversikan saat insert: STR_TO_DATE() di MySQL, TO_DATE() di PostgreSQL, dan CONVERT() dengan nomor style di SQL Server. SQLite tidak bisa mem-parse format lain, jadi susun ulang teksnya dengan substr().
Contoh nyata menyisipkan tanggal
Menambahkan beberapa tanggal dalam satu statement
Daftar hari libur nasional bisa dimasukkan dengan satu INSERT dan satu baris nilai per tanggal:
INSERT INTO holidays (holiday_name, holiday_date)
VALUES
('Independence Day', '2026-07-04'),
('Thanksgiving', '2026-11-26'),
('Christmas Day', '2026-12-25');
Mengisi tanggal hari ini dengan default
Beri kolom nilai default, dan setiap INSERT yang tidak menyertakannya akan mendapat tanggal hari ini. MySQL memerlukan tanda kurung di sekitar 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
Menyimpan waktu rapat lokal sebagai UTC
Seseorang di New York memesan rapat pukul 9:30 AM waktu setempat. Konversikan ke UTC saat insert agar waktu semua orang selaras:
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 tidak punya zona waktu bernama, jadi lakukan konversi di aplikasi Anda sebelum insert.
Menetapkan tanggal perpanjangan sebulan ke depan
Sebuah langganan diperpanjang satu bulan setelah dimulai. Hitung tanggal perpanjangannya di dalam 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
Perhatikan akhir bulan di SQLite. Dari 31 Januari, hasilnya meluap ke Maret, sedangkan database lain berhenti di 28 Februari:
SELECT date('2026-01-31', '+1 month');
-- Output: 2026-03-03
Mengimpor tanggal hari/bulan/tahun
Seorang pemasok mengirim faktur dengan format tanggal ala Inggris, 15/06/2021. Beri tahu database susunannya saat insert:
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
Bacaan lanjutan tentang menyisipkan tanggal
Di blog ini:
- Panduan Format Tanggal SQL: tampilkan tanggal tersimpan dalam format apa pun yang Anda butuhkan
- Panduan SQL DATEDIFF: hitung jumlah hari, bulan, atau tahun di antara dua tanggal
- Statement SQL INSERT: sintaks INSERT itu sendiri
- Panduan SQL CREATE TABLE: kolom tanggal, default, dan constraint
-
Memformat tanggal di PostgreSQL: tipe tanggal PostgreSQL dan
TO_CHAR - Impor data CSV ke SQL Server dengan BULK INSERT: memuat file hasil ekspor, termasuk tanggal
Dokumentasi resmi:
- PostgreSQL: Date/Time Types
- MySQL: The DATE, DATETIME, and TIMESTAMP Types
- SQLite: Date And Time Functions
- SQL Server: Date and time data types and functions
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna Tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan alur kerja SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."