W Oracle SIGN()
funkcja zwraca znak swojego argumentu jako -1
, 0
lub 1
, w zależności od tego, czy argument jest ujemny, zerowy czy dodatni, a także w zależności od tego, czy argument jest typu NUMBER
lub liczba zmiennoprzecinkowa.
Składnia
Składnia wygląda tak:
SIGN(n)
Gdzie n
może być dowolnym liczbowym typem danych lub dowolnym nienumerycznym typem danych, który można niejawnie przekonwertować na NUMBER
i zwraca NUMBER
.
Jak odszyfrować wynik
Rzeczywisty wynik będzie zależał od tego, czy argumentem jest NUMBER
typ lub binarną liczbę zmiennoprzecinkową (BINARY_FLOAT
i BINARY_DOUBLE
).
Dla wartości NUMBER
typ, znak to:
- -1, jeśli
n
<0 - 0, jeśli
n
=0 - 1 jeśli
n
>0
W przypadku binarnych liczb zmiennoprzecinkowych SIGN()
funkcja zwraca bit znaku liczby. Bit znaku to:
- -1, jeśli
n
<0 - +1, jeśli
n
>=0 lubn
=NaN
Przykład
W tym przykładzie przekazuję NUMBER
typ:
SELECT SIGN(78.50)
FROM DUAL;
Wynik:
ZNAK(78.50) ______________ 1
Oto kolejny przykład demonstrujący różne wyniki za pomocą NUMBER
typ:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Wynik:
Binarne liczby zmiennoprzecinkowe
Oto przykład tego, co się dzieje, gdy rzutujemy te liczby jako binarne liczby zmiennoprzecinkowe:
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;
Wynik:
Dodałem także NaN
do listy (binary_float_nan
literał zmiennoprzecinkowy reprezentuje wartość typu BINARY_FLOAT
dla którego warunek IS
NAN
to prawda).
Argumenty nieliczbowe
Oto, co się dzieje, gdy przekazujemy argument nieliczbowy, którego nie można przekonwertować na numeryczny typ danych:
SELECT SIGN('Bruce')
FROM DUAL;
Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT SIGN('Bruce')FROM DUALError report -ORA-01722:nieprawidłowy numer
Wartości puste
Przekazywanie null
zwraca null
:
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Wynik:
SIGN(NULL) _____________ null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie SIGN()
bez przekazywania żadnych argumentów zwraca błąd:
SELECT SIGN()
FROM DUAL;
Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT SIGN()FROM DUALError w wierszu polecenia:1 Kolumna:8Raport o błędzie -SQL Błąd:ORA-00909:nieprawidłowa liczba argumentów00909. 00000 - "nieprawidłowa liczba argumentów"*Przyczyna:*Działanie:
A przekazanie niewłaściwej liczby argumentów skutkuje błędem:
SELECT SIGN(2, 3)
FROM DUAL;
Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT SIGN(2, 3)FROM DUALError w wierszu polecenia:1 Kolumna:8Raport o błędzie -SQL Błąd:ORA-00909:nieprawidłowa liczba argumentów00909. 00000 - "nieprawidłowa liczba argumentów"*Przyczyna:*Działanie: