Trong Cơ sở dữ liệu Oracle, TRUNC(number)
hàm trả về một số nhất định, được cắt ngắn đến một số vị trí thập phân nhất định.
Oracle cũng có TRUNC(date)
hàm, được sử dụng vào ngày tháng. Bài viết này chỉ nói về TRUNC(number)
, được sử dụng trên các số.
Cú pháp
Cú pháp như sau:
TRUNC(n1 [, n2 ])
Ở đâu n1
là giá trị cần cắt bớt và n2
là một đối số tùy chọn chỉ định có bao nhiêu vị trí thập phân để cắt bớt n1
đến. Nếu n2
bị bỏ qua, sau đó n1
được cắt ngắn đến 0 vị trí thập phân.
n1
có thể là bất kỳ kiểu dữ liệu số nào hoặc bất kỳ kiểu dữ liệu phi số nào có thể được chuyển đổi hoàn toàn thành kiểu dữ liệu số.
Ví dụ
Đây là một ví dụ:
SELECT TRUNC(3.95)
FROM DUAL;
Kết quả:
TRUNC(3.95) ______________ 3
Chỉ định một vị trí thập phân
Dưới đây là một ví dụ về cách chuyển đối số thứ hai để chỉ định số vị trí thập phân để cắt bớt giá trị thành:
SELECT TRUNC(1.25817, 2)
FROM DUAL;
Kết quả:
TRUNC(1.25817,2) ___________________ 1.25
Đây là một số khác:
SELECT
TRUNC(1.25817, 1) AS "1",
TRUNC(1.25817, 2) AS "2",
TRUNC(1.25817, 3) AS "3",
TRUNC(1.25817, 4) AS "4"
FROM DUAL;
Kết quả:
1 2 3 4 ______ _______ ________ _________ 1.2 1.25 1.258 1.2581
Vị trí thập phân phủ định
Đối số thứ hai có thể là giá trị âm nếu được yêu cầu. Việc chuyển một giá trị âm làm cho các chữ số ở bên trái vị trí thập phân trở thành số không.
Ví dụ:
SELECT TRUNC(6973.45, -2)
FROM DUAL;
Kết quả:
TRUNC(6973.45,-2) ____________________ 6900
So với ROUND()
TRUNC()
hàm khác với ROUND()
hàm số. ROUND()
hàm làm tròn số lên trong một số trường hợp và giảm xuống ở 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 bớt số mà không làm tròn số.
Dưới đây là một so sánh để chứng minh sự khác biệt này:
SELECT
TRUNC(3.6789, 2),
ROUND(3.6789, 2)
FROM DUAL;
Kết quả:
TRUNC(3.6789,2) ROUND(3.6789,2) __________________ __________________ 3.67 3.68
Nó cũng khác với FLOOR()
hàm, trả về số nguyên lớn nhất bằng hoặc nhỏ hơn đối số của nó. FLOOR()
không chấp nhận đối số thứ hai như ROUND()
và TRUNC()
do (dù sao nó cũng chỉ trả về một số nguyên).
Giá trị rỗng
Nếu bất kỳ đối số nào là null
, kết quả là null
:
SET NULL 'null';
SELECT
TRUNC(null, 2),
TRUNC(2.35, null),
TRUNC(null, null)
FROM DUAL;
Kết quả:
TRUNC(NULL,2) TRUNC(2.35,NULL) TRUNC(NULL,NULL) ________________ ___________________ ___________________ 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.
Đối số không phải dạng số
Đây là những gì sẽ xảy ra khi chúng tôi cung cấp các đối số không phải là số:
SELECT TRUNC('Hundred', 'Two')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TRUNC('Hundred', 'Two') FROM DUAL Error report - ORA-01722: invalid number
Số lượng đối số không hợp lệ
Đang gọi TRUNC()
với số lượng đối số sai hoặc 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à:
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: