Når du forespørger data med SQL, er behovet for at manipulere strengbaserede resultater meget almindeligt. Der er mange muligheder på tværs af de store relationelle databasesystemer til denne opgave. I denne artikel vil vi diskutere brugen og funktionaliteten af REPLACE SQL-funktionen.
Kom godt i gang med REPLACE
FIND og REPLACE-funktionaliteten er velkendt for alle, da den kommer med enhver teksteditor. ANSI SQL tilbyder REPLACE-funktionaliteten i form af en indbygget systemfunktion. I denne artikel vil jeg bruge SQL Server som mit foretrukne RDMS.
REPLACE Funktionsparametre
REPLACE (string_expression, string_pattern, string_replacement)
String_expression er en streng, der vil blive transformeret, kan den være en enkelt streng eller en kolonne fra en indgående SQL-forespørgsel.
String_pattern er et søgemønster, der anvendes på det strengudtryk, der skal erstattes.
String_replacement er en erstatningsværdi, der anvendes på strengen, når strengen _mønster er matchet med streng_udtrykket .
Lad os tage et kig på flere eksempler for bedre at forstå REPLACE-funktionen.
Oprettelse af eksempeldata
Til dette eksempel vil jeg oprette en midlertidig tabel skal bruges med REPLACE-funktionen. Kolonnenavnene vil matche funktionens parameterværdier.
HVIS OBJECT_ID(N'tempdb..#TEMP_REPLACE_DEMO') IKKE ER NULLDROP TABLE #TEMP_REPLACE_DEMOCREATE TABEL #TEMP_REPLACE_DEMO(ID INT IDENTITY(1,1),STRING_EXPRESSION VARCHAR_PAT_2000),STRING_EXPRESSION VARCHAR_PAT_000) VARCHAR(200))--ERSTAT VÆRDIBILEN MED FOXINSERT I #TEMP_REPLACE_DEMOVALUES('Den røde bil er den hurtigste bil i løbet.','bil','ræv')--ERSTAT VÆRDI 4 MED 8INSERT INTO #TEMP_REPLACE_DEMOVALUES ('Der er 4 model ford-biler på parkeringspladsen.','4','8')--FJERN DET BLANKE MELLEMRUM KARAKTERINDSÆTNING I #TEMP_REPLACE_DEMOVALUES(' Denne sætning har uregelmæssige mellemrum . ',' ','')
Simpel og dynamisk REPLACE Eksempler
Nu hvor tabellen er fyldt med nogle eksempeldata, lad os undersøge, hvordan ERSTAT funktion kan anvendes på dataene på et grundlæggende niveau og derefter i en mere dynamisk kapacitet.
I det første eksempel er parametrene hårdkodet som strengværdier til funktionen.
--ERSTAT VÆRDIBILEN MED FOXSELECT REPLACE('Den røde bil er den hurtigste bil i løbet.','bil','ræv') SOM RESULT_FOR_SETNING
Værdierne kan også læses dynamisk fra tabellen. I dette tilfælde læses udtrykket, mønsteret og erstatningsværdierne alle direkte fra tabellen i stedet for at blive hårdkodet.
--DYNAMISK EKSEMPEL FOR ALLE KOLONNER I TABELLEN.VÆLG ID,REPLACE(STRING_EXPRESSION,STRING_PATTERN,STRING_REPLACEMENT) SOM RESULT_FOR_TABLEFFR #TEMP_REPLACE_DEMO
Resultaterne for ID 1 er de samme som eksemplet ovenfor, den eneste forskel er, at værdierne blev læst fra de enkelte kolonner.
Indlejrede erstatninger
REPLACE-funktionen kan også bruges i en indlejret kapacitet. Dette betyder, at resultaterne af den indre REPLACE-funktion kan blive parameteren STRING_EXPRESSION for den ydre erstatningsfunktion.
Her er nogle eksempler på dette mønster på prøvedataene:
--UDSKIFT VÆRDIBILEN MED FOX | ERSTAT VÆRDIEN "hurtigst" MED "langsomst"VÆLG REPLACE(REPLACE('Den røde bil er den hurtigste bil i løbet.','bil','ræv'),'hurtigste','langsomste')--FJERN THE BLANKT RUMS KARAKTER | ERSTAT VÆRDIEN "irregular" med "no"SELECT REPLACE(REPLACE(' Denne sætning har uregelmæssig mellemrum . ',' ',''),'irregular','NO')
Samling og REPLACE i SQL
Sortering er en vigtig faktor at overveje, når du arbejder med strengdata og REPLACE-funktionen. Sortering kan indstilles på flere niveauer i en database, såsom et konto- eller instansniveau, database-, skema-, sessions- eller tabelniveau. Denne indstilling kan påvirke, hvordan REPLACE-funktionen fungerer.
I dette eksempel forventer du muligvis ikke, at stort A erstattes med lille b. Men det afhænger af den sortering, der nedarves til den aktuelle forbindelse til databasen.
--REPLACERING UDEN EKSPLITIGT SAMLING.SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Dette resultat matcher a med A på grund af sorteringen.
Sorteringsindstillingen i SQL Server kan kontrolleres på serverniveau:
--VIS AKTUEL SAMLING VÆLG KONVERT (varchar(256), SERVERPROPERTY('sortering'));
Nøglen her er CI, som står for case insensitive. For at anvende REPLACE-funktionen i en kapacitet, der skelner mellem store og små bogstaver, kan parameteren string_expression sammenstilles eksplicit.
-- BRUG COLLATE FOR AT MATCH CHARACTER CASING FOR REPLACESELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') som Explicit_Collation;
I dette eksempel erstatter REPLACE-funktionen ikke den oprindelige værdi, fordi parameteren string_expression er sorteret som store og små bogstaver.
Oversigt
REPLACE-funktionen er et fantastisk værktøj til grundlæggende og avanceret strengmanipulation på tværs af flere relationelle databasesystemer. Denne artikel undersøgte den grundlæggende anvendelse af REPLACE-funktionen, hvordan man bruger den i en dynamisk kapacitet. Vi diskuterede også brugen af REPLACE som en indlejret funktion, og hvordan sortering kan påvirke resultaterne returneret af den.