Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja LENGTH() w Oracle

W Oracle LENGTH() funkcja zwraca długość swojego argumentu.

LENGTH() można również traktować jako grupę funkcji. Istnieje pięć oddzielnych funkcji; LENGTH() , LENGTHB() , LENGTH() , LENGTH2() i LENGTH4() . Każda funkcja oblicza długość w inny sposób.

Składnia

Składnia wygląda tak:

{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)

Funkcje obliczają długości w następujący sposób:

Funkcja Oblicza długość za pomocą…
LENGTH() Znaki zdefiniowane przez zestaw znaków wejściowych, przy czym pierwszy znak ciągu ma pozycję 1.
LENGTHB() Bajtów
LENGTH() Kompletne znaki Unicode
LENGTH2() Punkty kodowe UCS2
LENGTH4() Punkty kodowe UCS4

Typ argumentu może być następujący:

  • Gdy używasz LENGTH() i LENGTHB() składnia, argument może być dowolnym typem danych CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB lub NCLOB .
  • Gdy używasz LENGTHC() , LENGTH2() i LENGTH4() składnia, argument może być dowolnym typem danych CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (ale nie CLOB lub NCLOB ).

Przykład

Oto podstawowy przykład:

SELECT LENGTH('Big fat cat')
FROM DUAL;

Wynik:

11

W porównaniu z LENGTHB()

Ten przykład pokazuje, w jaki sposób wyniki mogą się różnić w zależności od używanej konkretnej funkcji i zestawu znaków.

W tym przypadku porównujemy LENGTH() z LENGTHB() :

SELECT 
    LENGTH('Böyük yağlı pişik') AS LENGTH,
    LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;

Wynik:

   LENGTH    LENGTHB 
_________ __________ 
       17         22

Widzimy, że te dwie funkcje zwróciły dwa różne wyniki. Dzieje się tak, ponieważ niektóre znaki w tym ciągu używają dwóch bajtów.

LENGTH() funkcja zwraca długość w znakach określoną przez zestaw znaków wejściowych, podczas gdy LENGTHB() funkcja zwraca długość w bajtach .

Jeśli wrócimy do oryginalnego ciągu, wyniki obu funkcji są takie same:

SELECT 
    LENGTH('Big fat cat') AS LENGTH,
    LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;

Wynik:

   LENGTH    LENGTHB 
_________ __________ 
       11         11 

Ten ciąg używa tylko jednego bajtu na znak, więc długość w bajtach jest taka sama jak liczba znaków.

Argument zerowy

Jeśli argumentem jest null , wynik to null :

SET NULL 'null';
SELECT 
    LENGTH(null) AS LENGTH,
    LENGTHB(null) AS LENGTHB,
    LENGTHC(null) AS LENGTHC,
    LENGTH2(null) AS LENGTH2,
    LENGTH4(null) AS LENGTH4
FROM DUAL;

Wynik:

   LENGTH    LENGTHB    LENGTHC    LENGTH2    LENGTH4 
_________ __________ __________ __________ __________ 
     null       null       null       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 funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:

SELECT LENGTH()
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LENGTH()
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:

Przekazywanie zbyt wielu argumentów również skutkuje błędem:

SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LENGTH('Big fat cat', 'oops')
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. Brama PL/SQL w R11i

  2. UTWÓRZ procedurę Oracle

  3. Jaka jest domyślna precyzja i skala liczby w Oracle?

  4. WHERE_IN zapytanie z kluczem złożonym?

  5. Czy jest jakaś różnica między !=i <> w Oracle Sql?