SQLite Funkce pro práci s řetězci: REPLACE, SUBSTR, TRIM, LENGTH

⚡ Chytré shrnutí

SQLite Řetězcové funkce jako LENGTH, SUBSTR, REPLACE a TRIM manipulují s textem přímo v dotazech, zatímco numerické pomocné funkce jako ABS a ROUND, plus pomocné funkce TYPEOF a verze, rozšiřují možnosti... SQLite knihovna vystupuje.

  • 📏 Délka: Funkce LENGTH počítá, kolik znaků řetězec obsahuje, a vrací hodnotu null, kdykoli je předaná hodnota null.
  • 🔠 Převod případů: Funkce UPPER a LOWER přepíná řetězec na velká nebo malá písmena, přičemž čísla a hodnoty null zůstávají nezměněny.
  • ✂️ Podřetězce: SUBSTR extracts znaky z vybrané pozice, zatímco REPLACE zamění každý výskyt jednoho podřetězce za jiný.
  • 🧮 Numerické pomocníky: Funkce ABS vrací hodnotu bez znaménka a funkce ROUND zkracuje desetinné číslo na požadované číslice.
  • 🔍 Inspekce: TYPEOF vrací datový typ výrazu a LAST_INSERT_ROWID vrací ID posledního vloženého řádku.
  • 🤖 Asistence AI: Scaffold nástrojů GitHub Copilot a AI pro převod textu do SQL SQLite dotazy funkcí, zatímco vlastní funkce jazyka C rozšiřují vestavěnou knihovnu.

SQLite Řetězcové funkce

Jak nastavit SQLite a spouštět dotazy na řetězcové funkce

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 je nutné spustit soubor sqlite3.exe a otevřít připojení k ukázkové databázi takto:

Krok 1) V tomto kroku otevřete složku Tento počítač, přejděte do adresáře „C:\sqlite“ a poté otevřete soubor „sqlite3.exe“:

SQLite Řetězcové funkce

Krok 2) Otevřete databázi „TutorialsSampleDB.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('řetězec') vrací řetězec „řetězec“ ve formě velkých písmen „ŘETĚZEC“.
  • LOWER('ŘETĚZEC') vrací řetězec „ŘETĚZEC“ malými písmeny v podobě „ř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í zadaný počet řetězců, počínaje od určité pozice. Funkci můžete předat tři operandy, například takto „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 výchozí pozice pro extracřetězec začínající od něj.
  • 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 bude bývalýtracŘetězec začínající od pozice Y určuje 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énoStudenta, 2, 4) podřetězec „JménoStudenta“ počínaje druhým znakem a vrací další 4 znaky.
  • Ve funkci SUBSTR(JménoStudenta, 2) jsme však nezadali počet znaků, které se mají vrátit, proto SQLite vrátil všechny zbývající znaky v poli „StudentName“ počínaje druhou pozici.

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 všechny výskyty řetězce „xx“ ř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 replace nahradila všechny řetězce „xx“ řetězcem „SQLite".
  • Výstup tedy 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 pro 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 je C#, C, PHP nebo C++ a připojil tuto funkci k jádru SQLite funkce v SQLite samotnou knihovnu pomocí funkce „sqlite3_create_function“. Poté je můžete znovu použít ve své databázi.

Příklad:

V následujícím příkladu vytvoříme uživatelem definovanou funkci pomocí programovacího jazyka C# a přidáme ji 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 „Double„Hodnota“ bere jeden parametr a vrací jeho hodnotu vynásobenou dvěma.

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í.

Nejčastější dotazy

Skalární funkce jako LENGTH, UPPER a ROUND se spustí jednou za řádek a každá vrátí jednu hodnotu. Agregační funkce jako COUNT, SUM a GROUP_CONCAT zpracovávají více řádků najednou a vracejí jeden kombinovaný výsledek pro celou skupinu.

SQLite Spojuje řetězce operátorem ||, například 'a' || 'b'. Novější verze také přidávají skalární funkce concat() a concat_ws(), zatímco group_concat() kombinuje hodnoty z mnoha řádků do jednoho řetězce s oddělenými hodnotami.

Ano. SQLite poskytuje funkce DATE, TIME, DATETIME, JULIANDAY a STRFTIME. Tyto funkce formátují a vypočítávají data z textu, časových razítek Unixu nebo speciální hodnoty 'now', protože SQLite ukládá data jako TEXT, REAL nebo INTEGER, nikoli jako vyhrazený typ.

Ve výchozím nastavení UPPER a LOWER mění pouze písmena ASCII od A do Z, takže znaky s diakritikou nebo znaky jiné než latinka zůstávají nezměněny. Úplná konverze velkých a malých písmen Unicode vyžaduje rozšíření ICU zkompilované do SQLite, což obsahuje jen málo výchozích sestavení.

Použijte funkci INSTR(X, Y), která vrací první pozici podřetězce Y v řetězci X, počínaje od 1. Pokud podřetězec chybí, vrátí 0. Spárujte INSTR se SUBSTR pro extractext za shodným znakem.

Zabalte výraz do funkce IFNULL(X, fallback) nebo COALESCE(X, fallback), chcete-li nahradit výchozí hodnotu, když funkce vrátí hodnotu null. Funkce COALESCE přijímá několik argumentů a vrací první hodnotu, která není null, což je výhodné v případě, že mnoho sloupců může být prázdných.

Ano. GitHub Copilot navrhuje volání funkcí LENGTH, SUBSTR, REPLACE a ROUND z komentáře nebo názvu tabulky a vytváří uživatelsky definovaný funkční kód v jazyce C nebo C#. Vždy otestujte jeho výstup s vaším schématem, protože může vymýšlet názvy sloupců.

Ano. Asistenti s umělou inteligencí pro převod textu do SQL převádějí požadavky v prostém jazyce na SQLite dotazy, které používají řetězcové funkce jako TRIM a REPLACE. Zrychlují prototypováníping, přesto byste měli ověřit vygenerovaný SQL s vašimi daty, protože modely strojového učení někdy produkují nepřesnou logiku.

Shrňte tento příspěvek takto: