Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm TRUNC (số) trong Oracle

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()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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để kiểm tra xem giá trị DataReader không phải là null hay không?

  2. Làm cách nào để xóa các bản sao khỏi danh sách được phân tách bằng dấu phẩy bằng regex trong Oracle nhưng tôi không muốn các giá trị trùng lặp?

  3. Làm thế nào để tìm được nhân viên có mức lương cao thứ hai?

  4. Biểu thức chính quy Oracle. Phạm vi nguy hiểm

  5. Checker Run