När du söker efter data med SQL är behovet av att manipulera strängbaserade resultat mycket vanligt. Det finns många alternativ i de stora relationsdatabassystemen för denna uppgift. I den här artikeln kommer vi att diskutera användningsfallet och funktionaliteten för REPLACE SQL-funktionen.
Komma igång med REPLACE
HITTA och ERSÄTT funktionen är välkänd för alla eftersom den kommer med alla textredigerare. ANSI SQL erbjuder REPLACE-funktionen i form av en inbyggd systemfunktion. I den här artikeln kommer jag att använda SQL Server som mitt val av RDMS.
REPLACE Funktionsparametrar
REPLACE (string_expression, string_pattern, string_replacement)
String_expression är en sträng som kommer att transformeras, det kan vara en enstaka sträng eller en kolumn från en inkommande SQL-fråga.
String_pattern är ett sökmönster som tillämpas på stränguttrycket som ska ersättas.
String_replacement är ett ersättningsvärde som tillämpas på strängen när strängen _mönster matchas till stränguttrycket .
Låt oss ta en titt på flera exempel för att bättre förstå REPLACE-funktionen.
Skapa exempeldata
För det här exemplet kommer jag att skapa en tillfällig tabell ska användas med REPLACE-funktionen. Kolumnnamnen kommer att matcha parametervärdena för funktionen.
IF OBJECT_ID(N'tempdb..#TEMP_REPLACE_DEMO') IS NOT NULL
DROP TABLE #TEMP_REPLACE_DEMO
CREATE TABLE #TEMP_REPLACE_DEMO
(
ID INT IDENTITY(1,1),
STRING_EXPRESSION VARCHAR(2000),
STRING_PATTERN VARCHAR(200),
STRING_REPLACEMENT VARCHAR(200)
)
--REPLACE THE VALUE CAR WITH FOX
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('The red car is the fastest car in the race.','car','fox')
--REPLACE THE VALUE 4 WITH 8
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('There are 4 model ford cars in the parking lot.','4','8')
--REMOVE THE BLANK SPACE CHARACTER
INSERT INTO #TEMP_REPLACE_DEMO
VALUES(' This sentence has irregular spacing . ',' ','')
Enkel och dynamisk REPLACE Exempel
Nu när tabellen är laddad med några exempeldata, låt oss undersöka hur ERSÄTT funktion kan appliceras på data på en grundläggande nivå och sedan i en mer dynamisk kapacitet.
I det första exemplet är parametrarna hårdkodade som strängvärden till funktionen.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
Värdena kan också läsas dynamiskt från tabellen. I det här fallet läses uttrycket, mönstret och ersättningsvärdena direkt från tabellen istället för att hårdkodas.
--DYNAMIC EXAMPLE FOR ALL COLUMNS IN THE TABLE.
SELECT ID,REPLACE(STRING_EXPRESSION,STRING_PATTERN,STRING_REPLACEMENT) AS RESULT_FOR_TABLE
FROM #TEMP_REPLACE_DEMO
Resultaten för ID 1 är desamma som exemplet ovan, den enda skillnaden är att värdena lästes från de enskilda kolumnerna.
Inkapslade ersättningar
ERSÄTT funktionen kan också användas i en kapslad kapacitet. Detta innebär att resultaten av den inre REPLACE-funktionen kan bli parametern STRING_EXPRESSION för den yttre ersättningsfunktionen.
Här är några exempel på detta mönster i exempeldata:
--REPLACE THE VALUE CAR WITH FOX | REPLACE THE VALUE "fastest" WITH "slowest"
SELECT REPLACE(REPLACE('The red car is the fastest car in the race.','car','fox'),'fastest','slowest')
--REMOVE THE BLANK SPACE CHARACTER | REPLACE THE VALUE "irregular" with "no"
SELECT REPLACE(REPLACE(' This sentence has irregular spacing . ',' ',''),'irregular','NO')
Sortering och REPLACE i SQL
Sortering är en viktig faktor att tänka på när man arbetar med strängdata och REPLACE-funktionen. Sortering kan ställas in på flera nivåer i en databas, såsom konto- eller instansnivå, databas-, schema-, sessions- eller tabellnivå. Den här inställningen kan påverka hur REPLACE-funktionen fungerar.
I det här exemplet kanske du inte förväntar dig att stort A ska ersättas med gement b. Men det är beroende av sorteringen som ärvs till den aktuella anslutningen till databasen.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Detta resultat matchar a med A på grund av sorteringen.
Sorteringsinställningen i SQL Server kan kontrolleras på servernivå:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
Nyckeln här är CI som står för skiftlägesinkänslig. För att tillämpa REPLACE-funktionen i en skiftlägeskänslig kapacitet kan parametern string_expression sammanställas explicit.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
I det här exemplet, eftersom parametern string_expression är sorterad som skiftlägeskänslig, ersätter inte REPLACE-funktionen det ursprungliga värdet.
Sammanfattning
REPLACE-funktionen är ett utmärkt verktyg för grundläggande och avancerad strängmanipulation över flera relationsdatabassystem. Den här artikeln undersökte den grundläggande tillämpningen av REPLACE-funktionen, hur man använder den i en dynamisk kapacitet. Vi diskuterade också att använda REPLACE som en kapslad funktion och hur sortering kan påverka resultaten som returneras av den.