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가 없어서 오늘 날짜를 구하려면 캐스트가 필요해요.
날짜를 삽입해야 하는 경우는?
날짜 삽입은 대부분 다음 다섯 가지 작업 중 하나이고, 작업마다 알맞은 도구가 있어요.
이미 알고 있는 날짜 기록하기
생일, 마감일, 약속 날짜는 사람이나 입력 폼에서 받아요. '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()로 텍스트를 재배열하세요.
날짜 삽입 실전 예제
한 문장으로 여러 날짜 추가하기
공휴일 목록은 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에는 이름 있는 시간대가 없으니 삽입 전에 애플리케이션에서 변환하세요.
한 달 뒤 갱신일 설정하기
구독은 시작일로부터 한 달 뒤에 갱신돼요. 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
날짜 삽입에 관한 추가 자료
이 블로그의 글:
- SQL 날짜 형식 가이드: 저장된 날짜를 원하는 형식으로 표시하기
- SQL DATEDIFF 가이드: 두 날짜 사이의 일, 월, 연 수 세기
- SQL INSERT 문: INSERT 구문 자체
- SQL CREATE TABLE 가이드: 날짜 컬럼, 기본값, 제약 조건
-
PostgreSQL에서 날짜 서식 지정하기: PostgreSQL의 날짜 타입과
TO_CHAR - BULK INSERT로 SQL Server에 CSV 데이터 가져오기: 날짜를 포함한 내보내기 파일 불러오기
공식 문서:
- PostgreSQL: 날짜/시간 타입
- MySQL: DATE, DATETIME, TIMESTAMP 타입
- SQLite: 날짜 및 시간 함수
- SQL Server: 날짜 및 시간 데이터 타입과 함수
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 기존 SQL 작업 방식을 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 돌아가요."