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: