Maybaygiare.org

Blog Network

SQLShack

In dit artikel gaan we leren hoe we de SQL-achtige operator in SQL Server kunnen gebruiken met behulp van reguliere expressies om tekst te vinden en/of te manipuleren. We zullen beginnen met het leren van de symbolen en de basissyntaxis van het gebruik van wildcard reguliere expressies. We zullen tekensets en herhalingsuitdrukkingen gebruiken om flexibele matching patronen te creëren, en onderweg zullen we verschillende manieren onderzoeken om de soortgelijke operator te gebruiken. En dan, tot slot, in het laatste deel van de sectie, zullen we enkele van de meest voorkomende en meest bruikbare voorbeelden van reguliere expressie verkennen.

SQL is de meest gebruikte taal om met databases te werken. Wanneer u een rapport ontwerpt of BI of een rapportagetool gebruikt, bouwt de software vrijwel zeker een SQL-query achter de schermen die op de database draait en uw geselecteerde gegevens retourneert. Wanneer we op zoek zijn naar specifieke gegevens of de gegevens die aan specifieke criteria voldoen, biedt de where-clausule de toolset die u nodig hebt. Dit geeft een optie om specifieke rijen die we zoeken te bevragen in plaats van de hele tabel.

Pre-requisites

Download hier de AdventureWorks2014 database om de volgende T-SQL samples te testen.

aan de slag

laten we de SQL-statements doorlopen met behulp van het trefwoord LIKE en jokertekens. Zo, laten we beginnen met het leren over sql als operator.

het gebruik van SQL-achtige jokertekens

reguliere expressies zijn patronen om te beschrijven hoe strings in een WHERE-clausule overeen moeten komen. Veel programmeertalen ondersteunen reguliere expressies die iets andere syntaxis gebruiken dan wat wordt gebruikt met de operator LIKE. In dit artikel, wanneer we verwijzen naar reguliere expressies, verwijzen we naar de patronen die gebruikt worden met de SQL-achtige operator

De volgende tabel bevat de vier verschillende jokertekens. U kunt ook verwijzen naar het artikel SQL string functies voor data Munging (Wrangling) voor meer voorbeelden.

Jokertekens

Beschrijving

%

Een string met nul of meer tekens in de zoekopdracht

één teken zoeken met het opgegeven patroon

één teken te zoeken binnen het opgegeven bereik

één teken te zoeken niet binnen het opgegeven bereik

met Behulp van SQL, ZOALS met het ‘%’ jokerteken

De volgende SQL statement geeft alle rijen van persoon tabel waar hun achternaam begint met de letter A. laten we de letter ‘A’, het eerste teken dat moet worden in de string en gebruik dan de Joker ‘%’, het percentage.

1
2
3

SELECTEER TOP 10 *
VAN de Persoon.Persoon
met voornaam als ‘ a%’;

u zult de uitvoer zien die top 10 rijen van de persoonentabel toont waar de voornaam begint met A en de rest van het teken onbekend is.

met behulp van SQL zoals met het ‘_’ jokerteken

het jokerteken, underscore, is voor het matchen van een enkel teken. Het volgende SQL-statement vindt alle telefoonnummers die een netnummer hebben dat begint met 7 en eindigt op 8 in de kolom telefoonnummer. We hebben ook % jokerteken toegevoegd aan het einde van het zoekpatroon, omdat we niet bezig zijn met de rest van de tekenreekswaarden.

1
2
3
4
5
6
7

SELECTEER blz.Voornaam
blz.Achternaam
Telefoonnummer
VAN de Persoon.PersonPhone als ph
INNER JOIN persoon.Persoon als p op ph.Bedrijfsentiteitid = p.BusinessEntityID
waarbij ph. PhoneNumber zoals ‘7_8%’
volgorde door P.achternaam;

De uitvoer laat zien dat het netnummer van dat begint met 7 en eindigt met 8 worden weergegeven.

met behulp van SQL zoals met de jokertekens

vierkante haakjes bijvoorbeeld kunnen we meerdere afzonderlijke tekens identificeren die zich in die specifieke positie zouden bevinden. Laten we bijvoorbeeld alle rijen weergeven waar voornamen derde teken beginnen met I of K. In plaats van het schrijven van meerdere soortgelijke voorwaarden, kunnen we de patroon matching set in de derde positie en sluit het in het vierkant. De zoekmachine zoekt eerst naar ‘ I ‘en dan naar’K’.

Laten we het uitvoeren van de volgende SQL-instructie

1
2
3
4
5
6
7

SELECTEER blz.Voornaam
blz.Achternaam,
telefoonnummer
van persoon.PersonPhone als ph
INNER JOIN persoon.Persoon als p op ph.BusinessEntityID = p.BusinessEntityID
waarbij ph.PhoneNumber zoals ‘7_8%’ en p.achternaam zoals ‘Ba%’
volgorde door p.achternaam;

de bovenstaande query kan worden herschreven met behulp van of conditie. Het is meer een of voorwaarde.

1
2
3
4
5
6
7

SELECTEER blz.Voornaam
blz.Achternaam
Telefoonnummer
VAN de Persoon.PersonPhone als ph
INNER JOIN persoon.Persoon als p op ph. BusinessEntityID = p. BusinessEntityID
waarbij het pH. Phonennummer als ‘7_8%’ en (P.achternaam als ‘Bai%’ of p.achternaam als ‘Bak%’)
OM DOOR p.Achternaam;

In de uitvoer we kunnen zien dat de laatste namen waar het derde teken is van ‘ik’ of ‘k’ worden weergegeven

met Behulp van SQL, ZOALS met de ‘^’ jokerteken

De volgende SQL-instructie geeft alle rijen die niet de brief die begint met Een D in de eerste letter van de achternaam. Om die plaats het tilde karakter in de eerste positie van het patroon. Het wordt de niet-Voorwaarden.

1
2
3
4
5

SELECTEER blz.Voornaam
blz.Achternaam
VAN de Persoon.Persoon p
waarbij achternaam zoals ‘ % ‘
volgorde van p. achternaam;

nu, als ik de bovenstaande query uit voer, zullen we zien dat alle Namen die terugkomen geen A, B, C of D als eerste karakter hebben.

met behulp van SQL niet zoals met de jokertekens

het volgende SQL-statement vindt alle personen waar de kolom voornaam meer dan 3 tekens heeft.

1
2
3
4

SELECT DISTINCT
voornaam
VAN de Persoon.Persoon
waarbij voornaam NIET als “;

De output lijst alleen de namen waar de lengte van de voornaam is meer dan 3

Met behulp van SQL, ZOALS met de ESCAPE-component

In de volgende SQL-instructie, de ESCAPE-component wordt gebruikt om te ontsnappen aan het teken ‘!’om de Betekenis van’ % ‘ te ontkennen om de tekenreeks ‘100% vrij’ te vinden in de kolom col1 van de temp tabel.

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 *
van TEMP;
SELECT *
van temp
waarbij col1 als ‘ % 100!% Gratis% ‘ESCAPE’!’;
GO

De uitvoerlijst bevat alleen waarden waarbij het zoekpatroon ‘100% vrij’ overeenkomt met de col1-expressie.

met behulp van SQL zoals met de CASE statement

het volgende SQL statement trekt alle werknemers die een telefoonnummer hebben opgemaakt als drie-drie-vier cijfers met streepjes ertussen (999-999-9999). Het patroon wordt dan vergeleken met phonenumber kolom om de binnenlandse of internationale categorieën af te leiden.

De case-expressie wordt geëvalueerd voor het specifieke patroon om het type telefooncategorie af te leiden.

1
2
3
4
5
6
7
8
9

SELECTEER blz.Voornaam
blz.Achternaam
Telefoonnummer,
het GEVAL WANNEER de ph.Telefoonnummer ALS ‘–‘ en vervolgens op ‘Binnenlandse Telefoonnummer’
ANDERS ‘Internationale telefoonnummer’
INDIA Telefoonnummer
VAN de Persoon.PersonPhone als ph
INNER JOIN persoon.Persoon als p op ph.BusinessEntityID = p.BusinessEntityID
volgorde door P.achternaam;

In de uitvoer kunnen we zien dat het nummer is geclassificeerd als binnenlands of internationaal. De kolom telefoonnummer wordt geëvalueerd met de operator zoals deze met behulp van de vierkante haakje. Het getal nul tot negen in de positie van het eerste teken wordt geëvalueerd voor het matchen van patroon nul tot negen, elk getal van nul tot negen in de positie van het tweede teken en derde en dan de positie van het vierde teken moet een streepje zijn en soortgelijke logica wordt toegepast op de rest van de tekens.

met behulp van SQL zoals bij dynamische SQL

het volgende SQL-statement geeft alle werknemers waar de achternaam overeenkomt met het patroon Barb. Het patroon wordt dynamisch gemaakt en vergeleken met de expressie.

1
2
3
4
5
6
7

met VERMELDING van @ELastName VARCHAR(20)= ‘Barb’;
SELECTEER blz.Voornaam
blz.Achternaam
het.Plaats
van de persoon.Persoon p
Word lid van de persoon.Adres de OP p. BusinessEntityID = ‘s. AddressID
waarbij p. achternaam zoals’ % ‘ + @ELastName+’%’;

De uitvoer een lijst van de overeenkomstige rijen voor de opgegeven patroon Barb

Opmerking: standaard CHAR injecteert eindspaties afhankelijk van de lengte van het veld. Gebruik RTRIM om de achterliggende spaties te onderdrukken, als u het Char data-type gebruikt.

in het volgende SQL statement is het veld @eLastName van het type char data. U kunt het gebruik van de RTRIM-functie zien om de achterliggende spaties bij te knippen.

1
2
3
4
5
6
7

met VERMELDING van @ELastName CHAR(20)= ‘Barb’;
SELECTEER blz.Voornaam
blz.Achternaam
het.Plaats
van de persoon.Persoon p
Word lid van de persoon.Adres de OP p. BusinessEntityID = ‘s. AddressID
waarbij p. achternaam zoals’ % ‘ +RTRIM (@ELastName)+’%’;

met behulp van SQL zoals met een IF statement

het volgende SQL statement, wordt de invoerwaarde geëvalueerd voor het specifieke patroon in de voorwaarde clausule met behulp van IF statement.

1
2
3
4
5

VERKLAREN @RuleName NVARCHAR(MAX)= ‘SQL Sever 2019 CTP preview beschikbaar is’;
IF @RuleName LIKE ‘SQL Sever % CTP is available for preview’
PRINT ‘ valid input good!’;
ELSE
PRINT ‘ not a valid good!’;

De invoerstring wordt geëvalueerd voor specifieke patronen met behulp van SQL-achtige jokertekens en geeft een geldige invoerstring terug.

dat is alles voor nu!

samenvatting

tot nu toe hebben we verschillende tips en vier verschillende jokertekens besproken ( % ,_,, en ^] die beschikbaar zijn met de SQL-achtige operator. Het is een geweldige zoektechniek voor het matchen van tekenreeks met de opgegeven patronen of waar we niet helemaal zeker van wat je zoekt aka fuzzy search. De beschikbare jokertekens maken de operator flexibeler. Ik hoop dat je genoten van dit artikel op de SQL als operator in SQL Server. Stel gerust vragen in de commentaren hieronder.

  • auteur
  • recente berichten
Prashanth Jayaram
Ik ben een Databasetechnoloog met meer dan 11 jaar rijke, hands-on ervaring met databasetechnologieën. Ik ben Microsoft gecertificeerd Professional en ondersteund met een diploma in Master of Computer Application.
mijn specialiteit ligt in het ontwerpen van & implementeren van High availability oplossingen en cross-platform DB migratie. De technologieën die momenteel werken aan zijn SQL Server, PowerShell, Oracle en MongoDB.
Bekijk alle berichten van Prashanth Jayaram

Prashanth Jayaram
Laatste berichten door Prashanth Jayaram (zie all)
  • Een overzicht van de audit database in SQL – 28 januari 2021
  • het instellen van Azure Data Sync tussen Azure SQL-databases en lokale SQL Server – 20 januari 2021
  • het uitvoeren van SQL Azure database Import/Export activiteiten met behulp van PowerShell – 14 januari 2021

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.