sql >> Databasteknik >  >> RDS >> Database

Hur man använder REPLACE i SQL

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.


  1. Kan inte använda ett CONTAINS- eller FREETEXT-predikat i tabell eller indexerad vy eftersom det inte är fulltextindexerat

  2. PostgreSQL - dynamiskt värde som tabellnamn

  3. Flera array_agg()-anrop i en enda fråga

  4. FATAL:lösenordsautentisering misslyckades för användare postgres (postgresql 11 med pgAdmin 4)