2016-05-31 12 views
1

Ich habe eine Übersetzungstabelle, die zwei Geldspalten hat: Originalzeichen und Zeichen, um es zu ersetzen. Kein Zeichen in Spalte A ist in Spalte B enthalten oder umgekehrt. Bei einer gegebenen Zeichenfolge möchte ich jede Zeile meiner Übersetzungstabelle durchlaufen und jedes Zeichen der Eingabestring in Spalte A durch Zeichen in Spalte B ersetzen und ein vollständig übersetztes Ergebnis zurückgeben. Ich weiß, wie man das mit einer while-Schleife macht, aber ich würde es vorziehen, wenn möglich keine zu verwenden, da sie langsam sein können.muate Zeichenfolge in SQL mit Übersetzungstabelle ohne While-Schleife verwenden

UPDATE:

Übersetzungstabelle Beispiel:

ColA | ColB 

%  | P 
$  | D 

Eingabestring:% EN $ ANT

Erwartete Ausgabe: PENDANT

+3

Beschreiben Sie nicht Ihre Tabellenstruktur in Worten, zeigen Sie uns die Tabellenstruktur, Beispieldaten und gewünschte Ergebnisse. – Siyual

+4

Markieren Sie die von Ihnen verwendeten dbms. Fügen Sie Tabellendefinitionen, Beispieltabellendaten und das erwartete Ergebnis hinzu. – jarlh

+0

Um auf Jarlh's Kommentar zu erweitern: Es ist hilfreich, Datenbank Fragen mit der entsprechenden Software (MySQL, Oracle, DB2, ...) und Version, z. 'sql-server-2014'. Unterschiede in Syntax und Funktionen beeinflussen oft die Antworten. – HABO

Antwort

0

Wenn Sie die Datenbank verwenden möchten, diese zu lösen Art von Problem Sie könnten entweder eine Funktion definieren, die es für Sie tut, oder Sie können es folgendermaßen tun:

DECLARE @t TABLE (_from CHAR(1), _to CHAR(1), _order int); 

INSERT INTO @t 
     (_from, _to, _order) 
VALUES 
('%','P',1), 
('$','D',2) 


DECLARE @inp VARCHAR(20) = '%EN$ANT'; 

WITH cte AS (

    SELECT REPLACE(@inp,_from,_to) replacement, _order FROM @t WHERE _order = 1 
    UNION ALL 

    SELECT REPLACE(replacement, _from,_to) , [@t]._order FROM cte 
    JOIN @t ON [@t]._order = cte._order+1 
) 
SELECT TOP 1 replacement 
FROM cte replacement 
ORDER BY _order desc 

Ergebnis:

replacement 
PENDANT 

Die _order ist nicht wichtig, es ist einfach da, um sicherzustellen, dass wir tun, einen Ersatz zu einem Zeitpunkt.

Verwandte Themen