V tomto článku se budeme učit, jak používat SQL, JAKO provozovatel, v SQL Server, pomocí regulární výrazy najít a/nebo manipulovat s textem. Začneme tím, že se naučíme symboly a základní syntaxi použití zástupných regulárních výrazů. Použijeme znakové sady a opakovací výrazy k vytvoření flexibilních vzorů shody a po cestě prozkoumáme různé způsoby použití podobného operátora. A nakonec v druhé části sekce prozkoumáme některé z nejběžnějších a nejužitečnějších příkladů regulárních výrazů.
SQL je nejčastěji používaný jazyk pro práci s databázemi. Při návrhu sestavy nebo použít BI nebo jakýkoliv nástroj pro podávání zpráv, software je téměř jistě budování SQL dotazu v zákulisí, který běží na databázi a vrací vaše vybraná data. Když hledáme konkrétní data nebo data, která odpovídají konkrétním kritériím, klauzule where poskytuje sadu nástrojů, které potřebujete. To dává možnost dotazovat se na konkrétní řádky, které hledáme místo celé tabulky.
předpoklady
Stáhněte si databázi AdventureWorks2014 zde a otestujte následující vzorky T-SQL.
Začínáme
projděme příkazy SQL pomocí klíčového slova LIKE a zástupných znaků. Pojďme se tedy začít učit o SQL jako operátor.
použití SQL jako příklady zástupných znaků
regulární výrazy jsou vzory pro popis toho, jak porovnávat řetězce v klauzuli WHERE. Mnoho programovacích jazyků podporuje regulární výrazy, které používají mírně odlišnou syntaxi od toho, co se používá s operátorem LIKE. V tomto článku, když odkazujeme na regulární výrazy, odkazujeme na vzory používané s operátorem SQL LIKE
následující tabulka obsahuje čtyři různé zástupné znaky. Další příklady naleznete v článku SQL string functions for Data Munging (Wrangling).
Zástupné znaky |
Popis |
% |
libovolný řetězec nula nebo více znaků ve vyhledávacím vzoru, |
Jakýkoliv jeden znak vyhledávání se zadaným vzorem, |
|
Žádné hledání jeden znak ve specifikovaném rozsahu |
|
Jakýkoliv jeden znak vyhledávání není ve specifikovaném rozsahu, |
Pomocí SQL JAKO s ‚%‘ zástupný znak
následující SQL příkaz vrátí všechny řádky osoba stolu, kde jejich příjmení začíná písmenem a. Dejte nám určit, písmeno „A“, první znak, který musí být v řetězci, a pak použít zástupné znaky ‚%‘,%.
1
2
3
|
VYBRAT TOP 10 *
OD Člověka.Osoba
kde křestní jméno jako’a%‘;
|
uvidíte výstup, který se seznamy top 10 řádků osoby stolu, kde jméno začíná na A a zbytek znaků je neznámý.
Pomocí SQL JAKO s ‚_‘ zástupný znak
zástupný, podtržítko, je pro odpovídající jednomu znaku. Následující příkaz SQL najde všechna telefonní čísla, která mají předvolbu začínající na 7 a končící na 8 ve sloupci phonenumber. Na konec vyhledávacího vzoru jsme také zahrnuli znak % zástupných znaků, protože se nezajímáme o ostatní hodnoty řetězců.
1
2
3
4
5
6
7
|
ZVOLTE p.Jméno,
p.Příjmení,
PhoneNumber
OD Člověka.PersonPhone jako ph
vnitřní připojit osobu.Osoba jako p na ph. BusinessEntityID = p.BusinessEntityID
, KDE ph.PhoneNumber JAKO ‚7_8%‘
ORDER BY p.Příjmení;
|
výstup ukazuje, že části kódu, které začínají 7 a končí s 8 jsou uvedeny.
Použití SQL JAKO s zástupné znaky
hranaté závorky e.g umožňují nám identifikovat několik samostatných znaků, které by v této konkrétní pozici. Řekněme například seznam všech řádků, kde křestní jména třetí znak začíná I nebo k. Místo psaní více podobných podmínek můžeme umístit sadu shody vzorů na třetí pozici a zavřít ji na náměstí. Dotazovací modul nejprve hledá „I“ a poté hledá „K“.
řekněme, spusťte následující příkaz SQL
1
2
3
4
5
6
7
|
ZVOLTE p.Jméno,
p.Příjmení,
PhoneNumber
od osoby.PersonPhone jako ph
vnitřní připojit osobu.Člověk JAKO p NA ph.BusinessEntityID = p.BusinessEntityID
, KDE ph.PhoneNumber JAKO ‚7_8% a p.příjmení jako ‚Ba%‘
ORDER BY p.Příjmení;
|
výše uvedený dotaz může být re-psaný s použitím NEBO stavu. Je to spíš podmínka OR.
1
2
3
4
5
6
7
|
ZVOLTE p.Jméno,
p.Příjmení,
PhoneNumber
OD Osoby.PersonPhone jako ph
vnitřní připojit osobu.Člověk JAKO p NA ph.BusinessEntityID = p.BusinessEntityID
, KDE ph.PhoneNumber JAKO ‚7_8%‘ a (p.příjmení jako ‚Bai%‘ nebo p.příjmení jako ‚Bak%‘)
ORDER BY p.Příjmení;
|
V výstup, můžeme vidět, že příjmení, je-li třetí znak je “ já „nebo“ k “ jsou uvedeny
Použití SQL JAKO s “ ^ “ zástupný znak
Následující SQL příkazu zobrazí všechny řádky, které nemají dopis, který začíná na D, první písmeno jejich příjmení. Aby bylo možné umístit znak vlnovky na první pozici vzoru. Stává se to ne předpoklady.
1
2
3
4
5
|
ZVOLTE p.Jméno,
p.Příjmení
OD Osoby.Osoba p
kde příjmení jako ‚ % ‚
pořadí podle p. příjmení;
|
Teď, když jsem spustit výše uvedený dotaz, uvidíme, že všechna jména, vrací nemají A, B, C nebo D jako jejich první znak.
Použití SQL NENÍ JAKO s zástupné znaky
následující SQL příkaz najde všechny osoby, kde první sloupec název má více než 3 znaky.
1
2
3
4
|
SELECT DISTINCT
jméno
OD Osoby.Osoba
kde se jméno nelíbí „;
|
výstup seznamu pouze ty názvy, kde délka firstname je více než 3,
Pomocí SQL JAKO s ÚNIKOVOU doložku
V následující SQL příkaz, ÚNIKOVOU doložku, se používá, aby se vyhnuli znak ‚!’negovat význam‘ % ‚najít řetězec‘ 100% Volný ‚ ve sloupci col1 tabulky temp.
1
2
3
4
5
6
7
8
9
10
11
12
|
DROP TABLE IF EXISTS temp;
CREATE TABLE temp(col1 VARCHAR(100));
GO
INSERT INTO temp
VALUES(‚ApexSQL Refactor is 100% Free SQL Formatter tool‘), (‚ApexSQL Job is 10-15% off today only‘);
GO
SELECT *
FROM TEMP;
SELECT *
FROM temp
WHERE col1 LIKE ‚%100!% Volný, uvolnit % ‚ uniknout ‚!‘;
|
výstup seznamu pouze ty hodnoty, kde hledat vzor 100% Zdarma‘ odpovídá col1 výraz.
Pomocí SQL JAKO s CASE
následující SQL příkaz vytáhne všechny zaměstnance, které mají telefonní číslo ve formátu, jako tři-tři-čtyři číslice s pomlčkami mezi (999-999-9999). Vzor je pak porovnán se sloupcem phonenumber, aby se odvodily domácí nebo mezinárodní kategorie.
výraz případu je vyhodnocen pro konkrétní vzor pro odvození typu kategorie telefonu.
1
2
3
4
5
6
7
8
9
|
ZVOLTE p.Jméno,
p.Příjmení,
PhoneNumber,
PŘÍPADĚ, KDY ph.PhoneNumber JAKO ‚–„, pak „Domácí Telefonní Číslo‘
OSTATNÍ Mezinárodní Telefonní číslo‘
INDIE PhoneNumber
OD Osoby.PersonPhone jako ph
vnitřní připojit osobu.Člověk JAKO p NA ph.BusinessEntityID = p.BusinessEntityID
ORDER BY p.Příjmení;
|
na výstup, můžeme vidět počet je klasifikován jako vnitrostátní nebo mezinárodní. Sloupec phonenumber je vyhodnocen operátorem LIKE pomocí hranaté závorky. Číslo nula až devět v první pozici znak je hodnocen pro odpovídající vzor nuly do devíti, jakékoli číslo od nuly do devíti v druhé pozice znaku a třetí a pak čtvrtá pozice znaku musí být pomlčka a podobnou logiku aplikuje na zbytek postav.
Pomocí SQL JAKO s dynamickým SQL
následující SQL příkaz vrátí všechny zaměstnance, kde příjmení se shoduje se vzorem Barb. Vzor je dynamicky vytvořen a porovnán s výrazem.
1
2
3
4
5
6
7
|
s UVEDENÍM @ELastName VARCHAR(20)= ‚Barb‘;
ZVOLTE p.Jméno,
p.Příjmení,
.Město
od osoby.Osoba p
připojte se k osobě.Adresa na p. BusinessEntityID = ‚s. AddressID
kde p. příjmení jako‘ % ‚ +@ELastName+’%‘;
|
výstup seznamu odpovídající řádky pro zadaný vzor Barb
Poznámka: ve výchozím nastavení CHAR vstřikuje koncové mezery v závislosti na délce pole. Použijte RTRIM k potlačení koncových polotovarů, pokud používáte datový typ char.
v následujícím příkazu SQL je pole @eLastName datového typu char. Můžete vidět použití funkce RTRIM oříznout koncové polotovary.
1
2
3
4
5
6
7
|
s UVEDENÍM @ELastName CHAR(20)= ‚Barb‘;
ZVOLTE p.Jméno,
p.Příjmení,
.Město
od osoby.Osoba p
připojte se k osobě.Adresa NA p.BusinessEntityID = ‚s. AddressID
, KDE p.Příjmení LIKE ‚%’+RTRIM(@ELastName)+’%‘;
|
Pomocí SQL Jako s, JESTLIŽE prohlášení,
následující SQL příkaz, vstupní hodnota je vyhodnocen pro konkrétní vzor ve stavu, v jakém bodě pomocí if.
1
2
3
4
5
|
DECLARE @RuleName NVARCHAR(MAX)= ‚SQL Sever 2019 CTP je k dispozici pro náhled‘;
pokud @RuleName jako ‚SQL Sever % CTP je k dispozici pro náhled‘
tisk ‚ platný vstup dobrý!‘;
ELSE
PRINT ‚ není platný dobrý!‘;
|
vstupní řetězec je vyhodnocen pro konkrétní vzory pomocí SQL jako zástupný výraz a vrátí platný vstupní řetězec.
to je prozatím vše!
Shrnutí
zatím jsme probrali různé tipy a čtyři různé zástupné znaky ( % ,_,,^], které jsou k dispozici s SQL JAKO provozovatel. Je to skvělá vyhledávací technika pro odpovídající řetězec znaků se zadanými vzory nebo kde jsme si úplně jisti, co hledáte aka fuzzy search. Díky dostupným zástupným znakům je operátor LIKE flexibilnější. Doufám, že se vám tento článek líbil na SQL jako operátor v SQL Serveru. Neváhejte se zeptat v komentářích níže.
- Autora
- Poslední Příspěvky
Moje specializace spočívá v navrhování & prováděcí Vysokou dostupnost řešení a cross-platform DB Migrace. Technologie, které v současné době pracují, jsou SQL Server, PowerShell, Oracle a MongoDB.
Zobrazit všechny příspěvky od Prashanth Jayaram
- rychlý přehled z databáze auditu v SQL – 28. ledna 2021
- Jak nastavit Azure Synchronizace Dat mezi SQL Azure databází a on-premises serveru SQL Server – 20. ledna 2021
- Jak provést SQL Azure databáze Import/Export operace pomocí PowerShell – 14. ledna 2021