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

Hàm SIGN () trong Oracle

Trong Oracle, SIGN() hàm trả về dấu của đối số là -1 , 0 hoặc 1 , tùy thuộc vào việc đối số là số âm, số không hay số dương và cũng tùy thuộc vào việc đối số thuộc loại NUMBER hoặc một số dấu phẩy động.

Cú pháp

Cú pháp như sau:

SIGN(n)

Ở đâu n có thể là bất kỳ kiểu dữ liệu số nào hoặc bất kỳ kiểu dữ liệu không phải số nào có thể được chuyển đổi hoàn toàn thành NUMBER và trả về NUMBER .

Cách giải mã kết quả

Kết quả thực tế sẽ phụ thuộc vào việc đối số có phải là NUMBER hay không loại hoặc số dấu phẩy động nhị phân (BINARY_FLOATBINARY_DOUBLE ).

Đối với giá trị của NUMBER loại, ký hiệu là:

  • -1 nếu n <0
  • 0 nếu n =0
  • 1 if n > 0

Đối với số dấu phẩy động nhị phân, SIGN() hàm trả về bit dấu của số. Bit dấu hiệu là:

  • -1 nếu n <0
  • +1 nếu n > =0 hoặc n =NaN

Ví dụ

Trong ví dụ này, tôi vượt qua một NUMBER loại:

SELECT SIGN(78.50)
FROM DUAL;

Kết quả:

   SIGN(78.50) 
______________ 
             1

Dưới đây là một ví dụ khác để chứng minh các kết quả đầu ra khác nhau với NUMBER loại:

SELECT 
    SIGN(7),
    SIGN(0),
    SIGN(-7)
FROM DUAL;

Kết quả:

   SIGN(7)    SIGN(0)    SIGN(-7) 
__________ __________ ___________ 
         1          0          -1

Số dấu phẩy động nhị phân

Dưới đây là một ví dụ về những gì sẽ xảy ra khi chúng tôi chuyển những số đó dưới dạng số dấu phẩy động nhị phân:

SELECT 
    SIGN(CAST(7 AS BINARY_FLOAT)) AS "7",
    SIGN(CAST(0 AS BINARY_FLOAT)) AS "0",
    SIGN(CAST(-7 AS BINARY_FLOAT)) AS "-7",
    SIGN(binary_float_nan) AS "NaN"
FROM DUAL;

Kết quả:

   7    0    -7    NaN 
____ ____ _____ ______ 
   1    1    -1      1 

Tôi cũng đã thêm NaN vào danh sách (binary_float_nan ký tự dấu phẩy động đại diện cho một giá trị của loại BINARY_FLOAT mà điều kiện IS NAN là đúng).

Đối số không phải dạng số

Dưới đây là những gì sẽ xảy ra khi chúng tôi chuyển đối số không phải là số không thể chuyển đổi thành kiểu dữ liệu số:

SELECT SIGN('Bruce')
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT SIGN('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Giá trị rỗng

Chuyển null trả về null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Kết quả:

   SIGN(NULL) 
_____________ 
         null

Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào 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 chính xác

Đang gọi SIGN() mà không chuyển bất kỳ đối số nào sẽ trả về lỗi:

SELECT SIGN()
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT SIGN()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

Và việc chuyển sai số đối số dẫn đến lỗi:

SELECT SIGN(2, 3)
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT SIGN(2, 3)
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*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. C #:Tương đương kiểu dữ liệu Oracle với OracleDbType

  2. Truy cập dịch vụ Web từ quy trình được lưu trữ của Oracle

  3. Cách sử dụng Hàm LISTAGG của Oracle

  4. PL / SQL - Sử dụng biến danh sách trong mệnh đề Where In

  5. Số lượt chọn (1) từ tên_bảng trên bất kỳ bảng cơ sở dữ liệu nào có nghĩa là gì?