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: