SQL - Ersetzen alle "ASCII/Sonderzeichen" in einen string

Edit: ich habe ungefähr 80 Zeichen, die Probleme verursachen in meiner Anwendung so will ich nicht zu hart code ERSETZEN für jedes einzelne Zeichen. Ich denke, es wäre einfacher zu erstellen Sie eine separate Tabelle mit zwei Spalten,"Sonderzeichen" und "replacement characters", und ich werde entfernen, die Spalten aus der original-Tabelle enthält die Spalte "StringTest". Mein Ziel wird es sein, herauszufinden, wie man die Zeichen-Tabelle zu ersetzen, die Zeichen in der string-Tabelle.

Ich versuche, Sie zu ersetzen alle "Sonderzeichen" (also À, Æ, Ç) mit "MappedCharacters" (A, AE, C) in SQL Server. Ich habe versucht, zwei verschiedene Techniken, einer mit einem cursor, ohne einen cursor zu durchsuchen einer Zeichenkette und ersetzt alle Sonderzeichen mit zugeordneten Zeichen. Jede meiner Methoden ersetzt nur Charaktere, die Sie in der gleichen Zeile als string.
Beispiel vor:

num   SpecialCharacter    MappedCharacter    StringTest
 1           À                   A             StringÀÆ
 2           Æ                   AE            ÆStringÆ
 3           Ç                   C             StrÇÀing

Beispiel nach:

num   SpecialCharacter    MappedCharacter    StringTest
 1           À                   A             StringAÆ
 2           Æ                   AE            AEStringAE
 3           Ç                   C             StrCÀing

Bevorzugte Ausgabe:

num   SpecialCharacter    MappedCharacter    StringTest
 1           À                   A             StringAAE
 2           Æ                   AE            AEStringAE
 3           Ç                   C             StrCAing

Damit Sie sehen können, dass ich alle ersetzen will "Sonderzeichen" in StringTest, sondern nur Zeichen, die in der gleichen Zeile werden immer ersetzt.

Ich habe noch nicht ganz herausgefunden, wie man das nur noch nicht.

Sind hier die zwei SQL-code, ich habe versucht, Sie zu ändern (ich brauche nur eine, um zu arbeiten)

Erste Methode:

              DECLARE @cASCIINum INT;
              DECLARE @cSpecialChar VARCHAR(50);
              DECLARE @cMappedChar VARCHAR(50);
              DECLARE @cStringTest VARCHAR(50);

              DECLARE @mapCursor as CURSOR;

              SET @mapCursor = CURSOR FOR
              SELECT [ASCIINum]
                    ,[SpecialChar]
                    ,[MappedChar]
                    ,[StringTest]
              FROM [intranet].[dbo].[CharMapTestTab]; 

              OPEN @mapCursor;
              FETCH NEXT FROM @mapCursor INTO @cASCIINum,
                                              @cSpecialChar,
                                              @cMappedChar,
                                              @cStringTest;

                WHILE @@FETCH_STATUS = 0
                BEGIN

                  UPDATE [intranet].[dbo].[CharMapTestTab]
                  SET StringTest = REPLACE(StringTest, SpecialChar, MappedChar)
                  WHERE SpecialChar <> MappedChar

                END

                CLOSE @mapCursor;
                DEALLOCATE @mapCursor;

Zweite Methode:

            DECLARE @ASCIINum INT = 0

            WHILE (1 = 1) 
            BEGIN  

              SELECT @ASCIINum = ASCIINum
              FROM [intranet].[dbo].[CharMapTestTab]
              WHERE ASCIINum > @ASCIINum 
              ORDER BY ASCIINum

              IF @@ROWCOUNT = 0 BREAK;

                  UPDATE [intranet].[dbo].[CharMapTestTab]
                  SET StringTest = REPLACE(StringTest, SpecialChar, MappedChar)
                  WHERE SpecialChar <> MappedChar


              SELECT TOP 1000 [ASCIINum]
                  ,[SpecialChar]
                  ,[MappedChar]
                  ,[StringTest]
              FROM [intranet].[dbo].[CharMapTestTab]



            END
die DB? Oracle? SQL-Server? MySQL? etc
Sie müssen Fetch Next innerhalb der Schleife auch. Wie in Fetch first while @@FetchStatus = 0 etwas zu tun FetchNext Ende
Dies ist in SQL Server-Thit Lwin Oo
Die sind beide Cursor

InformationsquelleAutor BrettKB | 2014-03-06

Schreibe einen Kommentar