sql >> Databáze >  >> RDS >> Database

Jak používat REPLACE v SQL

Při dotazování na data pomocí SQL je potřeba manipulovat s výsledky založenými na řetězcích velmi běžná. Pro tento úkol existuje mnoho možností napříč hlavními relačními databázovými systémy. V tomto článku probereme případ použití a funkčnost funkce REPLACE SQL.

Začínáme s REPLACE

Funkce FIND and REPLACE je každému dobře známá, protože přichází s jakýmkoli textovým editorem. ANSI SQL nabízí funkci REPLACE ve formě vestavěné systémové funkce. V tomto článku budu jako RDMS používat SQL Server.

REPLACE Parametry funkcí

REPLACE (řetězcový_výraz, vzor_řetězce, nahrazení_řetězce)

Řetězcový_výraz je řetězec, který bude transformován, může to být jeden řetězec nebo sloupec z příchozího SQL dotazu.

Vzor_řetězce je vyhledávací vzor, ​​který je aplikován na řetězcový výraz, který má být nahrazen.

Náhrada_řetězce je náhradní hodnota použitá na řetězec při řetězci _pattern odpovídá řetězcovému_výrazu .

Podívejme se na několik příkladů, abychom lépe porozuměli funkci REPLACE.

Vytvoření ukázkových dat

Pro tento příklad vytvořím dočasnou tabulku pro použití s ​​funkcí REPLACE. Názvy sloupců budou odpovídat hodnotám parametrů funkce.


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              .       ',' ','')

Jednoduché a dynamické REPLACE Příklady

Nyní, když je tabulka načtena ukázkovými daty, pojďme se podívat, jak NAHRADIT funkci lze aplikovat na data na základní úrovni a poté v dynamičtější kapacitě.

V prvním příkladu jsou parametry pevně zakódovány jako řetězcové hodnoty funkce.

--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE

Hodnoty lze také číst z tabulky dynamicky. V tomto případě jsou hodnoty výrazu, vzoru a nahrazení všechny čteny z tabulky přímo, místo toho, aby byly pevně zakódovány.

--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

Výsledky pro ID 1 jsou stejné jako v příkladu výše, rozdíl je pouze v tom, že hodnoty byly načteny z jednotlivých sloupců.

Vnořené náhrady

Funkci REPLACE lze také použít ve vnořené kapacitě. To znamená, že výsledky vnitřní funkce REPLACE se mohou stát parametrem STRING_EXPRESSION vnější funkce nahrazení.

Zde je několik příkladů tohoto vzoru na ukázkových datech:

--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')

Řazení a REPLACE v SQL

Řazení je důležitým faktorem, který je třeba vzít v úvahu při práci s daty řetězce a funkci REPLACE. Porovnání lze nastavit na více úrovních databáze, jako je úroveň účtu nebo instance, databáze, schématu, relace nebo úrovně tabulky. Toto nastavení může ovlivnit fungování funkce REPLACE.

V tomto příkladu nelze očekávat, že bude velké A nahrazeno malým b. Závisí to však na řazení, které se dědí do aktuálního připojení k databázi.

--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION

Tento výsledek odpovídá a až A kvůli řazení.

Nastavení řazení v SQL Server lze zkontrolovat na úrovni serveru:

--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation')); 
 

Klíčem je zde CI, což znamená nerozlišovat malá a velká písmena. Chcete-li použít funkci REPLACE v kapacitě rozlišující malá a velká písmena, lze parametr string_expression explicitně seřadit.

-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;

Protože je v tomto příkladu parametr string_expression porovnáván s rozlišením velkých a malých písmen, nenahrazuje funkce REPLACE původní hodnotu.

Shrnutí

Funkce REPLACE je skvělý nástroj pro základní a pokročilou manipulaci s řetězci napříč více relačními databázovými systémy. Tento článek zkoumal základní aplikaci funkce REPLACE, jak ji používat v dynamické kapacitě. Také jsme diskutovali o použití REPLACE jako vnořené funkce a o tom, jak může řazení ovlivnit výsledky, které vrací.


  1. Klauzule SQL mezi se sloupci řetězců

  2. Dokážete VYBRAT všechno, kromě 1 nebo 2 polí, bez spisovatelské křeče?

  3. Oracle číslo na C# desítkové

  4. Jak předat pole vlastního typu funkci Postgres