sql >> Databáze >  >> RDS >> Oracle

Funkce LENGTH() v Oracle

V Oracle LENGTH() funkce vrací délku svého argumentu.

LENGTH() lze také chápat jako skupinu funkcí. Existuje pět samostatných funkcí; LENGTH() , LENGTHB() , LENGTHC() , LENGTH2() a LENGTH4() . Každá funkce počítá délku jiným způsobem.

Syntaxe

Syntaxe vypadá takto:

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

Funkce vypočítají délky následovně:

Funkce Vypočítá délku pomocí…
LENGTH() Znaky definované vstupní znakovou sadou, přičemž první znak řetězce má pozici 1.
LENGTHB() Bajty
LENGTHC() Úplné znaky Unicode
LENGTH2() body kódu UCS2
LENGTH4() body kódu UCS4

Typ argumentu může být následující:

  • Při použití LENGTH() a LENGTHB() syntaxe, argument může být libovolný z datových typů CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB nebo NCLOB .
  • Při použití LENGTHC() , LENGTH2() a LENGTH4() syntaxe, argument může být libovolný z datových typů CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (ale ne CLOB nebo NCLOB ).

Příklad

Zde je základní příklad:

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

Výsledek:

11

Ve srovnání s LENGTHB()

Tento příklad ukazuje, jak se mohou výsledky lišit v závislosti na konkrétní funkci, kterou používáte, a na použité znakové sadě.

V tomto případě porovnáme LENGTH() s LENGTHB() :

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

Výsledek:

 DÉLKA DÉLKA B _________ __________ 17 22

Vidíme, že tyto dvě funkce vrátily dva různé výsledky. Důvodem je, že některé znaky v tomto řetězci používají dva bajty.

LENGTH() funkce vrací délku ve znacích, jak je definována vstupní znakovou sadou, zatímco LENGTHB() funkce vrací délku v bajtech .

Pokud se vrátíme k původnímu řetězci, výsledky jsou mezi oběma funkcemi stejné:

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

Výsledek:

 DÉLKA DÉLKA B _________ __________ 11 11 

Tento řetězec používá pouze jeden bajt na znak, takže délka v bajtech je stejná jako počet znaků.

Nulový argument

Pokud je argument null , výsledkem je 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; 

Výsledek:

 LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null null null null null 

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Nesprávný počet argumentů

Volání funkce bez předání jakýchkoli argumentů má za následek chybu:

SELECT LENGTH()
FROM DUAL; 

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT LENGTH()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

A předání příliš mnoha argumentů také vede k chybě:

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

Výsledek:

Chyba začínající na řádku:1 v příkazu -SELECT LENGTH('Velká tlustá kočka', 'jejda')FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:

  1. Je možné dotazovat se na konkrétní hodnotu ve sloupci odděleném čárkami?

  2. Chyba převodu dat hromadného načtení (neshoda typu nebo neplatný znak pro zadanou kódovou stránku) pro řádek 1, sloupec 4 (rok)

  3. Jak porovnat dvě tabulky sloupec po sloupci v oracle

  4. Nastavení časového limitu pro SQL Server