sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje funkce CHARINDEX() v SQL Server (T-SQL)

V SQL Server můžete použít T-SQL CHARINDEX() funkce k nalezení počáteční pozice znakového výrazu v rámci jiného znakového výrazu.

Jako argumenty zadáte oba znakové výrazy. Můžete také zadat volitelný argument pro určení pozice, na které má začít hledání.

Syntaxe

Syntaxe vypadá takto:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Kde expressionToFind je výraz, který chcete najít v druhém řetězci, a expressionToSearch je druhý řetězec. Volitelné start_location lze použít k určení pozice v rámci expressionToSearch které začít hledat.

Všimněte si, že je vrácena pouze pozice prvního výskytu.

Příklad

Zde je příklad:

SELECT CHARINDEX('Bob', 'Bob má rád pivo. Bob má také rád hovězí.') AS Result;

Výsledek:

+-----------+| Výsledek ||-----------|| 1 |+----------+

V tomto příkladu je prvním argumentem Bob , což znamená, že hledáme druhý argument pro Bob . Výsledek je 1, protože to je pozice, kde Bob první se objeví ve druhém argumentu.

Můžete si také všimnout, že Bob ve skutečnosti se v řetězci objeví dvakrát, ale vrátí se pouze pozice první shody.

Žádná shoda

Pokud druhý argument neobsahoval Bob výsledek by byl 0 .

SELECT CHARINDEX('Bob', 'Kate má ráda pivo. Kate má také ráda hovězí.') AS Result;

Výsledek:

+-----------+| Výsledek ||-----------|| 0 |+----------+

Určení počáteční pozice

Můžete (volitelně) zadat počáteční pozici pro vyhledávání. To znamená, že SQL Server přeskočí jakýkoli výskyt, který nastane před počáteční pozicí. Výsledky jsou však stále hlášeny na základě jeho pozice v rámci celého řetězce (nikoli z vámi zvolené počáteční pozice).

Zde je příklad k demonstraci:

SELECT CHARINDEX('Bob', 'Bob má rád pivo. Bob má také rád hovězí.', 16) AS Result;

Výsledek:

+-----------+| Výsledek ||-----------|| 17 |+----------+

V tomto příkladu začneme hledat na pozici 16 (což je shodou okolností mezera před 2. Bob ). Výsledkem je první výskyt Bob je přeskočen a pozice druhého je vrácena. A vidíme, že jeho pozice je 17 znaků od začátku řetězce (i když je to jen jeden znak od místa, kde jsme začali hledat).

Rozlišování malých a velkých písmen

Můžete explicitně provést vyhledávání s rozlišením velkých a malých písmen přidáním COLLATE klauzule k vašemu SELECT prohlášení:

Zde je příklad, který zahrnuje vyhledávání rozlišující malá a velká písmena a vyhledávání bez rozlišení malých a velkých písmen:

SELECT CHARINDEX('Pivo', 'Bob má rád pivo.' COLLATE Latin1_General_CS_AS) AS 'Rozlišuje malá a velká písmena', CHARINDEX('Pivo', 'Bob má rád pivo.' COLLATE Latin1_General_CI_AS) AS 'Nerozlišuje malá a velká písmena'; 

Výsledek:

+------------------+--------------------+| Rozlišovat malá a velká písmena | Nerozlišují se malá a velká písmena ||------------------+--------------------|| 0 | 11 |+------------------+--------------------+

První z nich rozlišuje velká a malá písmena, protože _CS (v řazení) znamená rozlišovat malá a velká písmena. Druhý nerozlišuje velká a malá písmena, protože _CI znamená Case-Insensitive.


  1. Oracle zkopíruje data do jiné tabulky

  2. Existuje v Microsoft SQL Server booleovský datový typ jako v MySQL?

  3. Jak RAND() funguje v MariaDB

  4. MariaDB JSON_QUOTE() Vysvětleno