sql >> Databáze >  >> RDS >> Sqlserver

Jak nahradit všechny výskyty řetězce jiným řetězcem na serveru SQL – REPLACE()

V SQL Server můžete použít T-SQL REPLACE() funkce, která nahradí všechny výskyty daného řetězce jiným řetězcem. Můžete například nahradit všechny výskyty určitého slova jiným slovem.

Syntaxe

Zde je oficiální syntaxe:

REPLACE ( string_expression , string_pattern , string_replacement )

Kde string_expression je řetězec, který obsahuje jednu nebo více instancí řetězce (nebo podřetězce), který má být nahrazen, string_pattern je řetězec, který se má nahradit, a string_replacement je řetězec, který jej nahradí.

Příklad

Zde je příklad k demonstraci:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Výsledek:

My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

V tomto příkladu tedy jednoduše nahradíme slovo some se slovem no .

Více slov

Samozřejmě neexistuje žádné pravidlo, které by říkalo, že slovo můžete nahradit pouze jedním slovem (a naopak). Koneckonců, jednoduše nahrazujeme řetězec jiným řetězcem, bez ohledu na to, zda tento řetězec obsahuje slova, písmena, čísla, mezery atd.

Takže jsme to jedno slovo mohli snadno nahradit dvěma nebo více slovy:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Výsledek:

My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

Zde tedy nahradíme slovo some se slovy lots of .

Odebrat slovo

Z řetězce můžete také odstranit slovo (nebo podřetězec). Chcete-li to provést, jednoduše jej nahraďte prázdným řetězcem:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Výsledek:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Pokud se však podíváte pozorně, uvidíte, že nový řetězec obsahuje dvojité mezery, kde jsme slovo odstranili. Je to proto, že slovo, které jsme odstranili, mělo vlevo a vpravo mezery. Odstranili jsme slovo, ale neodstranili jsme žádné mezery, proto zůstávají dvě mezery.

Můžeme to opravit vložením jedné z mezer ve slově, které má být odstraněno:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');

Výsledek:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Buďte opatrní!

Při použití REPLACE() je velmi snadné dělat chyby funkce (nebo jakákoli najít a nahradit funkcionalitu).

Například tato chyba:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Výsledek:

My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Jak vidíte, nahradili jsme slovo artpictures . V tomto případě však slovo apartment byl také ovlivněn – změnil se na apicturesment , což nebylo zamýšleno. Důvodem je slovo apartment obsahuje podřetězec art .

Obvykle se proti tomu můžete chránit přidáním mezer kolem hledaného slova a také náhradního slova:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');

Výsledek:

My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

To samozřejmě předpokládá, že nahrazujete celé slovo. Budete muset posoudit každou situaci, jakmile nastane.

Řazení/rozlišování malých a velkých písmen

Můžete použít volitelný COLLATE klauzule pro použití explicitního řazení na vstup. To se může hodit při provádění operací hledání/nahrazení rozlišujících velká a malá písmena a podobně.

Zde je příklad, který porovnává dvě kolace.

Nerozlišují se malá a velká písmena

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

Výsledek:

Dogs, Dogs, and more Dogs!

V tomto příkladu zadané řazení zahrnuje _CI v jeho názvu, což znamená „Nerozlišuje malá a velká písmena“. To způsobí, že všechny výskyty budou nahrazeny, přestože první výskyt obsahuje velká písmena.

Všimnete si, že tato metoda neovlivňuje velikost nahrazeného řetězce.

Rozlišují se malá a velká písmena

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

Výsledek:

Cats, Dogs, and more Dogs!

V tomto příkladu zadané řazení zahrnuje _CS v jeho názvu, což znamená „Rozlišovat malá a velká písmena“. To způsobí první výskyt Cat přeskočit, protože jeho prvním znakem je velké písmeno (což neodpovídá velikosti druhého argumentu).


  1. Vytvoření aplikace Java v Oracle JDeveloper, část 2

  2. Postgres:Jak udělat složené klíče?

  3. Jak vymazat všechny položky v mezipaměti v Oracle

  4. Jaká je skutečná hodnota zavedení Microsoft Access do vaší organizace?