Bij het opvragen van gegevens met SQL is het heel gebruikelijk om op tekenreeksen gebaseerde resultaten te manipuleren. Er zijn veel opties voor de belangrijkste relationele databasesystemen voor deze taak. In dit artikel bespreken we de use case en functionaliteit van de REPLACE SQL-functie.
Aan de slag met REPLACE
De FIND en REPLACE-functionaliteit is bij iedereen bekend, aangezien deze bij elke teksteditor wordt geleverd. ANSI SQL biedt de REPLACE-functionaliteit in de vorm van een ingebouwde systeemfunctie. In dit artikel zal ik SQL Server gebruiken als mijn favoriete RDMS.
RVERVANG Functieparameters
VERVANGEN (string_expression, string_pattern, string_replacement)
String_expression is een tekenreeks die wordt getransformeerd, het kan een enkele tekenreeks zijn of een kolom van een inkomende SQL-query.
String_pattern is een zoekpatroon dat wordt toegepast op de tekenreeksuitdrukking die moet worden vervangen.
String_replacement is een vervangingswaarde die wordt toegepast op de tekenreeks wanneer het tekenreekspatroon komt overeen met de string_expression .
Laten we een aantal voorbeelden bekijken om de REPLACE-functionaliteit beter te begrijpen.
Voorbeeldgegevens maken
Voor dit voorbeeld zal ik een tijdelijke tabel maken te gebruiken met de REPLACE-functie. De kolomnamen komen overeen met de parameterwaarden van de functie.
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 . ',' ','')
Eenvoudig en dynamisch REPLACE Voorbeelden
Nu de tabel is geladen met enkele voorbeeldgegevens, laten we eens kijken hoe de REPLACE functie kan worden toegepast op de gegevens op een basisniveau en vervolgens in een meer dynamische capaciteit.
In het eerste voorbeeld zijn de parameters hard gecodeerd als tekenreekswaarden voor de functie.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
De waarden kunnen ook dynamisch uit de tabel worden gelezen. In dit geval worden de expressie, het patroon en de vervangende waarden allemaal rechtstreeks uit de tabel gelezen in plaats van hard gecodeerd.
--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
De resultaten voor ID 1 zijn hetzelfde als in het bovenstaande voorbeeld, het enige verschil is dat de waarden uit de afzonderlijke kolommen zijn gelezen.
Geneste vervangingen
De REPLACE-functie kan ook genest worden gebruikt. Dit betekent dat de resultaten van de innerlijke REPLACE-functie de STRING_EXPRESSION-parameter van de buitenste vervangingsfunctie kunnen worden.
Hier zijn enkele voorbeelden van dit patroon op de voorbeeldgegevens:
--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')
Collatie en REPLACE in SQL
Sorteren is een belangrijke factor om te overwegen bij het werken met stringgegevens en de REPLACE-functie. Sortering kan op meerdere niveaus van een database worden ingesteld, zoals op account- of instantieniveau, op database-, schema-, sessie- of tabelniveau. Deze instelling kan invloed hebben op hoe de VERVANG-functie werkt.
In dit voorbeeld verwacht je misschien niet dat hoofdletter A wordt vervangen door kleine letters b. Maar het is afhankelijk van de sortering die wordt overgenomen van de huidige verbinding met de database.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Dit resultaat komt overeen met a tot A vanwege de sortering.
De sorteerinstelling in SQL Server kan op serverniveau worden gecontroleerd:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
De sleutel hier is de CI die staat voor hoofdletterongevoelig. Om de REPLACE-functie hoofdlettergevoelig toe te passen, kan de parameter string_expression expliciet worden verzameld.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
Omdat de parameter string_expression in dit voorbeeld hoofdlettergevoelig is gesorteerd, vervangt de functie REPLACE de oorspronkelijke waarde niet.
Samenvatting
De REPLACE-functie is een geweldig hulpmiddel voor eenvoudige en geavanceerde manipulatie van strings in meerdere relationele databasesystemen. Dit artikel onderzocht de basistoepassing van de REPLACE-functie, hoe deze in een dynamische capaciteit te gebruiken. We hebben ook gesproken over het gebruik van REPLACE als geneste functie en hoe sortering de resultaten kan beïnvloeden die hierdoor worden geretourneerd.