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.