Trino 는 날짜 리터럴에 타입 접두사를 쓴다. 문자열을 그대로 날짜 자리에 넣으면 암묵 변환되지 않는 경우가 많으므로 명시하는 편이 안전하다.
SELECT DATE '2026-03-09';
SELECT TIMESTAMP '2026-03-09 10:20:30';
SELECT TIMESTAMP '2026-03-09 10:20:30 Asia/Seoul';
SELECT CAST('2026-03-09' AS date);
SELECT CAST(ts_col AS date) FROM tbl;
현재 시각은 함수가 아니라 예약어 형태로도 쓴다.
SELECT current_date, current_timestamp, now();
current_timestamp 는 세션 타임존이 붙은 timestamp with time zone 을 돌려준다. now() 는 같은 값이다.
SELECT current_date + INTERVAL '1' DAY;
SELECT current_date - INTERVAL '7' DAY;
SELECT date_add('month', -1, current_date);
SELECT date_diff('day', DATE '2026-03-01', DATE '2026-03-09');
date_add(unit, value, timestamp) 와 date_diff(unit, from, to) 모두 단위가 첫 인자다. 다른 엔진과 인자 순서가 다르므로 옮겨 쓸 때 주의한다. date_diff 는 두 번째 인자에서 세 번째 인자를 향하는 방향으로 계산하므로 위 예는 8을 돌려준다.
단위는 millisecond · second · minute · hour · day · week · month · quarter · year 를 쓴다.
자주 쓰는 절단 함수도 있다.
SELECT date_trunc('month', current_date);
SELECT last_day_of_month(current_date);
SELECT format_datetime(current_timestamp, 'yyyy-MM-dd');
SELECT date_format(current_timestamp, '%Y-%m-%d');
SELECT date_parse('2026-03-09', '%Y-%m-%d');
SELECT parse_datetime('2026-03-09', 'yyyy-MM-dd');
패턴 문법이 두 갈래다. format_datetime · parse_datetime 은 Joda 계열 패턴(yyyy-MM-dd)을 쓰고, date_format · date_parse 는 MySQL 계열 패턴(%Y-%m-%d)을 쓴다. 섞어 쓰면 조용히 이상한 결과가 나오므로 한쪽으로 통일한다.
컬럼 쪽에 함수를 씌우면 커넥터로 조건이 내려가지 않아 원본 전체를 읽게 된다.
-- 피한다
WHERE date_format(event_ts, '%Y-%m-%d') = '2026-03-09'
-- 권한다
WHERE event_ts >= TIMESTAMP '2026-03-09 00:00:00'
AND event_ts < TIMESTAMP '2026-03-10 00:00:00'
파티션 컬럼이 문자열이면 문자열 그대로 비교한다. CAST(part_dt AS date) = DATE '...' 로 쓰면 파티션 가지치기가 동작하지 않는다.
timestamp 와 timestamp with time zone 은 다른 타입이다. 전자는 타임존 정보 없이 벽시계 시각만 담고, 후자는 오프셋을 함께 담는다. 두 타입을 비교하면 세션 타임존을 기준으로 변환된 뒤 비교되므로, 세션 타임존이 다른 클라이언트에서 같은 쿼리가 다른 결과를 낼 수 있다.
SELECT at_timezone(current_timestamp, 'Asia/Seoul');
SELECT with_timezone(TIMESTAMP '2026-03-09 10:00:00', 'Asia/Seoul');
date_diff 의 결과는 지정한 단위로 절단된 정수다. 일 단위로 계산하면 시·분은 버려진다.