При запитване на данни с SQL, необходимостта от манипулиране на базирани на низ резултати е много често срещана. Има много опции в основните системи за релационни бази данни за тази задача. В тази статия ще обсъдим случая на използване и функционалността на функцията REPLACE SQL.
Първи стъпки с REPLACE
Функционалността FIND и REPLACE е добре позната на всички, тъй като идва с всеки текстов редактор. ANSI SQL предлага функционалността REPLACE под формата на вградена системна функция. В тази статия ще използвам SQL Server като моя RDMS по избор.
RЗАМЕСТВАНЕ Функционални параметри
ЗАМЕНИ (низов_израз, низ_модел, низ_замяна)
String_expression е низ, който ще бъде трансформиран, може да бъде единичен низ или колона от входяща SQL заявка.
Модел_низ е шаблон за търсене, който се прилага към низовия израз, който трябва да бъде заменен.
Замяна на низ е заместваща стойност, приложена към низа, когато низ _pattern съответства на низовия_израз .
Нека да разгледаме няколко примера, за да разберем по-добре функцията REPLACE.
Създаване на примерни данни
За този пример ще създам временна таблица да се използва с функцията REPLACE. Имената на колоните ще съвпадат със стойностите на параметрите на функцията.
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 . ',' ','')
Прост и динамичен REPLACE Примери
Сега, когато таблицата е заредена с някои примерни данни, нека да разгледаме как ЗАМЕНИ функцията може да се приложи към данните на основно ниво и след това в по-динамичен капацитет.
В първия пример параметрите са твърдо кодирани като низови стойности на функцията.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
Стойностите също могат да се четат от таблицата динамично. В този случай стойностите на израза, шаблона и заместването се четат директно от таблицата, вместо да бъдат твърдо кодирани.
--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
Резултатите за ID 1 са същите като примера по-горе, единствената разлика е, че стойностите са прочетени от отделните колони.
Вложени замествания
Функцията REPLACE може да се използва и във вложен капацитет. Това означава, че резултатите от вътрешната функция REPLACE могат да станат параметър STRING_EXPRESSION на външната заместваща функция.
Ето някои примери за този модел върху примерните данни:
--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')
Колиране и РЗАМЯНАНЕ в SQL
Съпоставянето е важен фактор, който трябва да се вземе предвид при работа с низови данни и функцията REPLACE. Съпоставянето може да бъде зададено на множество нива на база данни, като ниво на акаунт или екземпляр, база данни, схема, сесия или ниво на таблица. Тази настройка може да повлияе на това как работи функцията REPLACE.
В този пример може да не очаквате главни букви A да бъдат заменени с малки букви b. Но зависи от съпоставянето, което се наследява от текущата връзка с базата данни.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Този резултат съвпада от a до A поради съпоставянето.
Настройката за съпоставяне в SQL Server може да се провери на ниво сървър:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
Ключът тук е CI, който е съкращение от нечувствителен към главни букви. За да приложите функцията REPLACE в капацитет, чувствителен към малки и големи букви, параметърът string_expression може да бъде изрично съпоставен.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
В този пример, тъй като параметърът string_expression е съпоставен като чувствителен към главните букви, функцията REPLACE не замества оригиналната стойност.
Резюме
Функцията REPLACE е чудесен инструмент за основна и усъвършенствана манипулация на низове в множество системи за релационни бази данни. Тази статия разгледа основното приложение на функцията REPLACE, как да я използвате в динамичен капацитет. Обсъдихме също използването на REPLACE като вложена функция и как съпоставянето може да повлияе на резултатите, върнати от нея.