Trong Cơ sở dữ liệu Oracle, TRUNC(date)
hàm trả về giá trị ngày đã cho với phần thời gian trong ngày được cắt ngắn thành đơn vị được cung cấp ở mô hình định dạng được chỉ định.
Oracle cũng có một TRUNC(number)
cú pháp, được sử dụng trên các số. Bài viết này chỉ nói về TRUNC(date)
cú pháp, được sử dụng vào ngày tháng.
Cú pháp
Cú pháp như sau:
TRUNC(date [, fmt ])
date
là ngày để cắt bớt và fmt
là một mô hình định dạng tùy chọn chỉ định một đơn vị để cắt bớt giá trị. Mô hình định dạng có thể là bất kỳ mô hình định dạng nào được hỗ trợ cho TRUNC(date)
và ROUND(date)
các chức năng.
Hàm hoạt động theo các quy tắc của lịch Gregory (nó không nhạy cảm với giá trị của NLS_CALENDAR
tham số).
Ví dụ
Đây là một ví dụ:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Kết quả:
01-AUG-35
Đây là một số khác:
SELECT
TRUNC(DATE '2035-08-22', 'D') AS "D",
TRUNC(DATE '2035-08-22', 'DD') AS "DD",
TRUNC(DATE '2035-08-22', 'MONTH') AS "Month",
TRUNC(DATE '2035-08-22', 'YEAR') AS "Year",
TRUNC(DATE '2035-08-22', 'CC') AS "CC"
FROM DUAL;
Kết quả:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
Kết quả được định dạng theo định dạng ngày cho phiên hiện tại. Xem Cách kiểm tra định dạng ngày của phiên hiện tại và cách thay đổi định dạng ngày cho phiên hiện tại để biết thêm thông tin về điều đó.
Đơn vị ngày mặc định
Đơn vị ngày mặc định là DD
:
SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Kết quả:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
So với ROUND()
TRUNC(date)
chức năng khác với ROUND(date)
hàm số. ROUND()
hàm làm tròn ngày trong một số trường hợp và giảm xuống trong một số trường hợp khác. TRUNC()
mặt khác, hàm này chỉ đơn giản là cắt ngắn ngày thành đơn vị được chỉ định mà không làm tròn.
Dưới đây là một so sánh để chứng minh sự khác biệt này:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Kết quả:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Giá trị rỗng
Nếu một trong hai đối số là null
, kết quả là null
:
SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Kết quả:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',NULL) __________________ _______________________________ null null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào giá trị null xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Số lượng đối số không hợp lệ
Đang gọi TRUNC()
không có đối số dẫn đến lỗi:
SELECT TRUNC()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TRUNC() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Và việc gọi nó với quá nhiều đối số dẫn đến lỗi:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TRUNC(1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 20 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: