sql >> Database teknologi >  >> RDS >> Sqlserver

Erstat flere tegn i en streng i SQL Server (T-SQL)

I SQL Server er REPLACE() funktion gør det muligt for os at erstatte en streng med en anden streng. Men hvad nu hvis du vil erstatte en liste med tegn med en anden liste med tegn?

TRANSLATE() funktion kan hjælpe.

Her er Microsofts forklaring på TRANSLATE() funktion:

Returnerer den streng, der er angivet som et første argument, efter at nogle tegn, der er angivet i det andet argument, er oversat til et destinationssæt af tegn, der er angivet i det tredje argument.

Klart som mudder?

Eksempel

Jeg tror, ​​det er en af ​​de gange, der virkelig råber på et eksempel.

SELECT TRANSLATE('Fred [10 points]', '[]', '()');

Resultat:

Fred (10 points)

Grundlæggende er det, som om vi har leveret en liste over værdier til at erstatte en anden liste over værdier. Men der er ingen grund til at adskille hvert listeelement med en separator.

Lige antal tegn

Det andet og tredje argument skal indeholde lige mange tegn.

Du kan med andre ord ikke gøre dette:

SELECT TRANSLATE('Fred [10 points]', '[]', '(');

Resultat:

Msg 9828, Level 16, State 1, Line 1
The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.

I dette tilfælde indeholder det andet argument to tegn, men det tredje argument indeholder kun ét, så vi får en fejl.

Dette sker, fordi SQL Server skal vide, hvilket tegn der skal erstatte det andet tegn i det andet argument. Den gennemgår hvert tegn, et efter et, og erstatter det med det tilsvarende tegn fra det tredje argument. Hvis ingen eksisterer, har den ingen anden mulighed end at smide en fejl.

Sammenlignet med REPLACE()

Her er et eksempel, der illustrerer forskellen mellem TRANSLATE() og REPLACE() .

SELECT 
  REPLACE('[] [hey]', '[]', '()') AS REPLACE,
  TRANSLATE('[] [hey]', '[]', '()') AS TRANSLATE;

Resultat:

+-----------+-------------+
 | REPLACE   | TRANSLATE   |
 |-----------+-------------|
 | () [hey]  | () (hey)    |
 +-----------+-------------+ 

REPLACE() funktionen forlader [hey] præcis som det er, fordi hele den streng blev ikke angivet i det andet argument. Denne funktion finder kun et match, hvis hele strengen er til stede.

TRANSLATE() funktion erstatter på den anden side [hey] med (hey) fordi det erstatter hvert tegn en efter en. Den leder ikke efter en hel streng at erstatte, den leder kun efter hver enkelt karakter individuelt.


  1. Sammenligning af Galera Cluster Cloud-tilbud:Anden del af Google Cloud Platform (GCP)

  2. Sådan kommer du i gang med Amazon ECS og Amazon Fargate

  3. Top ti MySQL GUI-værktøjer

  4. TABLOCK vs TABLOCKX