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_FLOAT và BINARY_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ặcn=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: