SQLite Funkce řetězce: REPLACE, SUBSTR, TRIM, ROUND

SQLite je standardně vybaven seznamem vestavěných funkcí v rámci SQLite knihovna. Můžete také přidat některé další uživatelské funkce pomocí jazyka C, abyste rozšířili základní funkce.

Všimněte si, že pro všechny následující příklady musíte spustit sqlite3.exe a otevřít připojení k ukázkové databázi jako plynulé:

Krok 1) V tomto kroku,

  1. Otevřete Tento počítač a přejděte do následujícího adresáře “C:\sqlite" a pak
  2. OTEVŘENO "sqlite3.exe"

SQLite Řetězcové funkce

Krok 2) Otevřít databázi"NávodySampleDB.db“ pomocí následujícího příkazu:

SQLite Řetězcové funkce

Nyní jste připraveni spustit jakýkoli dotaz a vyzkoušejte jakékoli dotazy použité v následujících částech.

Hledání LENGTH řetězce v SQLite

Chcete-li zjistit délku řetězce, použijte LENGTH(X), kde X je hodnota řetězce. Pokud je X nulová hodnota, funkce length vrátí nulovou hodnotu.

K získání délky číselné hodnoty můžete také použít funkci délky s číselnými hodnotami.

Příklad:

V následujícím příkladu vyzkoušíme syntaxi funkce LENGTH s následujícími hodnotami:

SELECT LENGTH('A string'), LENGTH(NULL), LENGTH(20), LENGTH(20.5);

To vám dá:

Hledání LENGTH řetězce v SQLite

Výsledek je následující:

  • LENGTH('Řetězec') vrátí 8, což je délka řetězce „A řetězec“.
  • LENGTH(NULL) vrátí hodnotu null.
  • LENGTH(20) vrátí 2, protože 20 je 2 délky.
  • LENGTH(20.5) vrátí 4; Plovoucí desetinná čárka "." se počítá jako znak, takže budete mít čtyři znaky – 3 znaky, které mají délku čísel. Plus ještě jeden znak pro plovoucí desetinnou čárku „.“.

Výměna pouzdra s funkcí UPPER a LOWER

UPPER(X) vrátí stejný řetězec x, ale bude reprezentovat všechny znaky řetězce velkými znaky.

LOWER(X) vrátí stejný řetězec x, ale bude reprezentovat všechny znaky řetězce malými znaky.

UPPER a LOWER vrátí hodnoty null, pokud jim předáte hodnotu null.

Pokud předáte číselné hodnoty do UPPER nebo LOWER, obě vrátí přesnou číselnou hodnotu.

Příklad:

SELECT UPPER('a string'), LOWER('A STRING'), UPPER(20), LOWER(20), UPPER(NULL), LOWER(NULL);

To vám dá:

Příklad funkcí UPPER a LOWER v SQLite

Výsledek je následující:

  • UPPER('a string') vrací řetězec “řetězec"zastoupení velkým písmenem"ŘETĚZEC".
  • LOWER('A STRING') vrátí řetězec “ŘETĚZEC"zastoupení malým písmenem"řetězec".
  • UPPER(20), LOWER(20) vrátí stejné číslo, protože nemají žádný vliv na čísla.
  • UPPER(NULL), LOWER(NULL) vrátí hodnotu null, protože jsme jim předali hodnotu null.

SQLite Funkce SUBSTR

Funkce SUBSTR vrací určitý počet řetězců počínaje od určité pozice. Funkci můžete předat tři operandy, jako je tento "SUBSTR(X,Y,Z)“ takto:

  • X je řetězcový literál nebo sloupec řetězce k analýze. Můžete předat doslovnou hodnotu (statickou hodnotu) nebo název sloupce a v tomto případě bude hodnota načtena z hodnot sloupce.
  • Y je počáteční pozice pro odečtení řetězce, který od ní začíná.
  • Z je počet znaků, které se mají analyzovat, počínaje konkrétní pozicí Y. Toto číslo je volitelné, můžete ho ignorovat, a v tomto případě SQLite odečte řetězec začínající od pozice Y a řekne konec řetězce.

Příklad:

V následujícím dotazu použijeme funkci SUBSTR k získání 4 znaků počínaje druhým znakem ze jmen studentů:

SELECT StudentName, SUBSTR(StudentName, 2, 4), SUBSTR(StudentName, 2)
FROM Students;

To vám dá:

Příklad funkce SUBSTR v SQLite

  • SUBSTR(jméno studenta; 2; 4) podřetězec řetězec "Jméno studenta” počínaje druhým znakem a vrátit další 4 znaky.
  • Nicméně ve funkci SUBSTR(jméno studenta; 2) neuvedli jsme číslo pro znaky, které mají být vráceny, proto SQLite vrátil všechny zbývající znaky v „Jméno studenta“ od druhé pozice.

Změna částí řetězce pomocí SQLite Funkce REPLACE

REPLACE se používá k nahrazení každého řetězce vyskytujícího se na jiném řetězci řetězcem.

REPLACE(X, Y, Z) – X je vstupní řetězcový literál nebo sloupec. Y je řetězec, který se má nahradit řetězcem Z. Všimněte si, že nahradí jakýkoli výskyt řetězce Y znakem Z, nikoli pouze jedním.

Příklad:

V následujícím dotazu nahradíme veškerý výskyt řetězce “xx"s řetězcem"SQLite"

SELECT REPLACE('xx is very lightweight, xx is easy to learn', 'xx', 'SQLite');

Tohle vám dá

Příklad funkce REPLACE v SQLite

  • Funkce nahradit nahradila všechny řetězce “xx"s řetězcem"SQLite".
  • Takže výstup bude "SQLite je velmi lehký, SQLite je snadné se naučit“.

Ořezávání prázdných míst pomocí SQLite Funkce TRIM

TRIM odstraní prázdná místa ze začátku nebo z konce řetězce. Neodstraní žádné mezery uprostřed řetězce, pouze od začátku nebo od konce.

Příklad:

V následujícím dotazu použijeme funkci TRIM k odstranění prázdných mezer ze začátku a konce řetězce.

Všimněte si, že operátor zřetězení „||“ se používá k přidání dalšího „;“ na konec řetězce. Abychom vám ukázali, že v černém okně byla odstraněna prázdná místa.

SELECT TRIM('      SQLite is easy to learn        ') || ';';

To vám dá:

Příklad funkce TRIM v SQLite

  • Všimněte si, jak byly prázdné mezery odstraněny ze začátku a z konce řetězce a nahrazeny ' ; ' na konci.

Čtení absolutních hodnot s SQLite Funkce ABS

Funkce ABS vrací absolutní hodnotu číselné hodnoty. Absolutní hodnota je číselná hodnota bez kladného nebo záporného znaménka. ABS(X) vrací hodnotu závislou na hodnotě X následovně:

  • Absolutní hodnota X, pokud X je číselná hodnota.
  • Hodnota NULL, pokud X je hodnota null.
  • Hodnota „0.0“, pokud X je řetězec.

Příklad:

V následujícím dotazu se pokusíme získat absolutní hodnotu řetězce, čísla a nulové hodnoty pomocí funkce ABS:

SELECT ABS(-2), ABS(+2), ABS('a string'), ABS(null);

To vám dá:

Příklad funkce ABS v SQLite

Výsledky jsou následující:

  • ABS(-2), ABS(+2) vrátí 2, protože 2 je absolutní hodnota pro „-2“ i „+2“.
  • ABS('řetězec') vrátí „0.0“, protože jste předali řetězcovou hodnotu, nikoli číselnou hodnotu.
  • ABS(null) vrátí hodnotu null, protože jste pro něj předali hodnotu null.

Zaokrouhlení hodnot pomocí funkce ROUND SQLite

Desetinná čísla jsou čísla s plovoucí desetinnou čárkou „.“ na něm například „20.5“, „8.65“. Část nalevo od plovoucí desetinné čárky se nazývá celočíselná část a část napravo od plovoucí desetinné čárky je desetinná část.

Celá čísla jsou čísla bez pohyblivé řádové čárky. Například „20“, „8“.

ROUND(X) převede desetinné hodnoty nebo sloupce X pouze na celá čísla. Část celého čísla, která je částí nalevo od desetinné čárky, bude vrácena a všechny číslice napravo od desetinné čárky budou odstraněny.

Příklad:

V následujícím dotazu vyzkoušíme funkci ROUND s různými možnostmi:

SELECT ROUND(12.4354354), ROUND(12.4354354, 2), ROUND(NULL), ROUND('a string');

To vám dá:

Příklad funkce ROUND v SQLite

Výsledek je následující:

  • ROUND(12.4354354) – vrací hodnotu „12“, protože jste nezadali počet číslic. Tak, SQLite odstranil celou desetinnou část.
  • ROUND(12.4354354, 2) – vrátí hodnotu „12.44“, protože jste zaokrouhlili pouze na 2 číslice, což jsou dvě číslice zprava od desetinné čárky.
  • ROUND(NULL) – vrátí hodnotu null, protože jste mu předali hodnotu null.
  • ROUND('a string') – vrací hodnotu „0.0“, protože jste mu předali řetězcovou hodnotu.

Nalezení datového typu výrazu pomocí funkce TYPEOF

Pokud chcete zjistit typ sloupce nebo literálovou hodnotu, můžete k tomu použít funkci TYPEOF.

Funkce TYPEOF(X) ze svého názvu vrací datový typ výrazu X. Vrací řetězcovou hodnotu označující datový typ X. Vrací hodnotu založenou na datových typech, ať už jde o hodnotu „NULL“, skutečné, textové, celé číslo, … atd.

Příklad:

V následujícím dotazu vyzkoušíme funkci TYPEOF s různými typy doslovných hodnot:

SELECT TYPEOF(null), TYPEOF(12), TYPEOF(12.5), TYPEOF('a string');

To vám dá:

Příklad funkce TYPEOF v SQLite

Vrácené výsledky jsou následující:

  • TYPEOF(null) – vrátí hodnotu null, protože jste mu předali hodnotu null.
  • TYPEOF(12) – vrátí celé číslo, protože 12 je celé číslo.
  • TYPEOF(12.5) – vrací REAL, protože 12.5 je reálné číslo.
  • TYPEOF('řetězec') – vrátí text, protože „řetězec“ je text.

Nalezení posledního vloženého záznamu s SQLite LAST_INSERT_ROWID

SQLite přiřadí klíč celého čísla (Id) pro všechny řádky ve všech tabulkách. Toto číslo se používá k jednoznačné identifikaci těchto řádků.

Když vložíte nový řádek do tabulky, SQLite přiřadí rowid jedinečnou hodnotu.

Pokud má tabulka primární klíč deklarovaný pouze v jednom sloupci a tento sloupec je datového typu INTEGER, bude tato hodnota sloupce použita jako rowid.

Funkce LAST_INSERT_ROWID() vrací ROW_ID posledního vloženého řádku v libovolné tabulce v databázi. Všimněte si, že to nebere žádný operand.

Příklad:

V následujícím příkladu spustíme funkci LAST_INSERT_ROWID() takto:

SELECT LAST_INSERT_ROWID();

To vám dá:

Příklad funkce LAST_INSERT_ROWID v SQLite

  • LAST_INSERT_ROWID() vrátí 0, protože do žádné tabulky v aktuálním databázovém připojení nejsou vloženy žádné řádky.

Nyní vložíme nového studenta a po příkazu insert znovu spustíme funkci LAST_INSERT_ROWID() takto:

INSERT INTO Students VALUES(11, 'guru', 1, '1998-10-12');
SELECT LAST_INSERT_ROWID();

To vám dá:

Příklad funkce LAST_INSERT_ROWID v SQLite

  • Poté, co jsme vložili nového studenta s ID 11, LAST_INSERT_ROWID() vrátí poslední vložené ID řádku, které je 11.

Získání verze vašeho SQLite knihovna

Chcete-li získat verzi vašeho SQLite knihovny, musíte zavolat funkci SQLITE_VERSION().

Příklad:

Pojďme zjistit, jaká je verze SQLite používáme spuštěním následujícího příkazu:

SELECT SQLITE_VERSION();

To vám dá:

Příklad k získání verze vašeho SQLite knihovna

SQLITE_VERSION() vrací 3.9.2, což je verze SQLite používáme.

Vytváření uživatelsky definovaných funkcí a agregace uživatelsky definovaných funkcí

Pro některé uživatele je SQLite základní funkce jsou omezené. Možná budou muset přidat vlastní funkce pro své vlastní potřeby.

SQLite nepodporuje vytváření uživatelsky definovaných funkcí. Na rozdíl od jiných systémů pro správu databází v nich nemůžete vytvářet funkce definované uživatelem SQLite přímo.

Funkci však můžete vytvořit pomocí programovacích jazyků jako C#, C, PHP nebo C++ a připojil tuto funkci k jádru SQLite funkce v SQLite samotná knihovna pomocí „sqlite3_create_functionfunkce “. Poté je můžete znovu použít ve své databázi.

Příklad:

V následujícím příkladu vytvoříme uživatelsky definovanou funkci pomocí C# programovací jazyk a přidat jej do SQLite funkce:

[SQLiteFunction(Name = "DoubleValue", Arguments = 1, FuncType = FunctionType.Scalar)]
public class DoubleValue: SQLiteFunction
{
    public override object Invoke(object[] args)
    {
        return args[0] * 2;
    }
}

Tento fragment kódu je zapsán v Programovací jazyk C#; vytvoří funkci C# pomocí kódu C#.

Název funkce bude „DoubleHodnota” vezme jeden parametr a vrátí jeho hodnotu vynásobenou 2.

Všimněte si, že C# tuto funkci automaticky přidá SQLite. Vše, co potřebujete, je zkompilovat a spustit tento kód. Potom C# přidá tuto funkci se stejným názvem do seznamu SQLite funkcí. Poté můžete tuto funkci použít v SQLite.

Stejným způsobem pomocí programovacích jazyků jako C#, C, PHP, popř C++, můžete také vytvářet agregované uživatelsky definované funkce. Které se používají k rozšíření agregačních funkcí v SQLite a použít je k vytvoření vlastních agregačních funkcí.

Shrnutí

  • SQLite poskytuje komplexní sadu vestavěných funkcí, které usnadňují práci s tabulkami a sloupci databáze, jak jsme viděli. Tyto funkce můžete použít se sloupci i doslovnými hodnotami v rámci libovolného výrazu v dotazech SQL.
  • K získání délky číselné hodnoty můžete také použít funkci délky s číselnými hodnotami.
  • UPPER a LOWER vrátí hodnoty null, pokud jim předáte hodnotu null.
  • Funkce SUBSTR vrací určitý počet řetězců počínaje od určité pozice.
  • REPLACE se používá k nahrazení každého řetězce vyskytujícího se na jiném řetězci řetězcem.
  • TRIM odstraní prázdná místa ze začátku nebo z konce řetězce.
  • Funkce ABS vrací absolutní hodnotu číselné hodnoty.
  • ROUND(X) převede desetinné hodnoty nebo sloupce X pouze na celá čísla.
  • Funkce TYPEOF(X) ze svého názvu vrací datový typ výrazu X.
  • Funkce LAST_INSERT_ROWID() vrací ROW_ID posledního vloženého řádku v libovolné tabulce v databázi.