Podczas wykonywania zapytań o dane za pomocą SQL, potrzeba manipulowania wynikami opartymi na ciągach jest bardzo powszechna. Istnieje wiele możliwości wykonania tego zadania w głównych relacyjnych systemach baz danych. W tym artykule omówimy przypadek użycia i funkcjonalność funkcji REPLACE SQL.
Pierwsze kroki z REPLACE
Funkcjonalność ZNAJDŹ i ZAMIEŃ jest dobrze znana wszystkim, ponieważ jest dostępna w każdym edytorze tekstu. ANSI SQL oferuje funkcjonalność REPLACE w postaci wbudowanej funkcji systemowej. W tym artykule będę używać SQL Server jako mojego ulubionego RDMS.
RMIEJSCE Parametry funkcji
REPLACE (wyrażenie_ciągowe, wzorzec_ciągowy, zastępowanie_ciągów)
String_expression to łańcuch, który zostanie przekształcony, może to być pojedynczy łańcuch lub kolumna z przychodzącego zapytania SQL.
Wzór_ciągu to wzorzec wyszukiwania stosowany do zastępowanego wyrażenia tekstowego.
String_replacement to wartość zastępcza stosowana do ciągu, gdy ciąg _pattern jest dopasowany do string_expression .
Rzućmy okiem na kilka przykładów, aby lepiej zrozumieć funkcję REPLACE.
Tworzenie przykładowych danych
W tym przykładzie utworzę tabelę tymczasową do użycia z funkcją REPLACE. Nazwy kolumn będą odpowiadać wartościom parametrów funkcji.
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 . ',' ','')
Proste i dynamiczne REPLACE Przykłady
Teraz, gdy tabela jest załadowana przykładowymi danymi, przyjrzyjmy się, jak ZAMIEN funkcja może być zastosowana do danych na podstawowym poziomie, a następnie w bardziej dynamicznym charakterze.
W pierwszym przykładzie parametry są zakodowane na stałe jako wartości ciągu do funkcji.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
Wartości można również dynamicznie odczytywać z tabeli. W tym przypadku wyrażenie, wzorzec i wartości zastępcze są odczytywane bezpośrednio z tabeli, a nie na stałe.
--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
Wyniki dla ID 1 są takie same jak w powyższym przykładzie, jedyną różnicą jest to, że wartości zostały odczytane z poszczególnych kolumn.
Zagnieżdżone zamienniki
Funkcji REPLACE można również używać w pojemnościach zagnieżdżonych. Oznacza to, że wyniki wewnętrznej funkcji REPLACE mogą stać się parametrem STRING_EXPRESSION zewnętrznej funkcji zastępującej.
Oto kilka przykładów tego wzorca na przykładowych danych:
--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')
Składanie i REPLACE w SQL
Sortowanie jest ważnym czynnikiem, który należy wziąć pod uwagę podczas pracy z danymi ciągu i funkcją REPLACE. Sortowanie można ustawić na wielu poziomach bazy danych, takich jak poziom konta lub instancji, baza danych, schemat, sesja lub poziom tabeli. To ustawienie może mieć wpływ na działanie funkcji REPLACE.
W tym przykładzie nie można oczekiwać, że wielkie A zostanie zastąpione małą literą b. Ale zależy to od sortowania, które jest dziedziczone po bieżącym połączeniu z bazą danych.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Ten wynik pasuje do a do A ze względu na sortowanie.
Ustawienie sortowania w SQL Server można sprawdzić na poziomie serwera:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
Kluczem jest tutaj CI, co oznacza niewrażliwość na wielkość liter. Aby zastosować funkcję REPLACE w pojemności, w której rozróżniana jest wielkość liter, parametr string_expression może być jawnie posortowany.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
W tym przykładzie, ponieważ parametr string_expression jest porównywany z uwzględnieniem wielkości liter, funkcja REPLACE nie zastępuje oryginalnej wartości.
Podsumowanie
Funkcja REPLACE jest doskonałym narzędziem do podstawowej i zaawansowanej manipulacji ciągami znaków w wielu relacyjnych systemach baz danych. W tym artykule zbadano podstawowe zastosowanie funkcji REPLACE, jak używać jej w dynamicznej pojemności. Omówiliśmy również użycie funkcji REPLACE jako funkcji zagnieżdżonej i sposób, w jaki sortowanie może wpłynąć na zwracane przez nią wyniki.