2013-02-12 4 views
7

Ich habe eine Datenbank mit dem Namen Account-Typ, die Wagenrücklauf und Newline-Zeichen enthält (CHAR (10) und CHAR (13)). Wenn ich nach diesem Wert suche, muss ich einen REPLACE wie unten gezeigt tun. Der folgende Code funktioniert einwandfrei.Verwendung von REPLACE in SQL-Abfrage für Zeilenvorschub/Carriage-Return-Zeichen

SELECT AccountNumber,AccountType, 
    REPLACE(REPLACE(AccountType,CHAR(10),'Y'),CHAR(13),'X') FormattedText 
FROM Account 
WHERE AccountNumber=200 
AND REPLACE(REPLACE(AccountType,CHAR(10),' '),CHAR(13),' ') LIKE 
'%Daily Tax Updates: -----------------  Transactions%' 

Meine Frage ist - was sind die anderen Zeichen (ähnlich CHAR (10) amd CHAR (13)), der müsste eine solche ersetzen?

Hinweis: Der Datentyp für die Spalte lautet VARCHAR.

Hinweis: Die Abfrage wird ausgeführt von SQL Server Management Studio

enter image description here

+3

Wir kennen Ihre Daten oder Ihre Anforderungen nicht, also wie sollen wir wissen, welche Zeichen Sie ersetzen müssen? –

+0

@ dan1111. Der Benutzer kann beliebige Daten in die Datenbank eingeben. Also, was alle Charakter brauchen solch eine ERSETZUNG. Oder gibt es eine bessere Methode als REPLCAE? – Lijo

+2

Nun, welche Zeichen möchten Sie zulassen? Es ist absolut zulässig, beliebige Zeichen einschließlich Zeilenumbrüche in einem Feld zu speichern. Wenn es welche gibt, die Sie nicht zulassen wollen, dann wegen Ihrer Design-Anforderungen (von denen wir nichts wissen). –

Antwort

8

Es gibt wahrscheinlich eingebettete Registerkarten (CHAR(9)) usw. auch. Sie können herausfinden, was andere Zeichen, die Sie ersetzen müssen (wir haben keine Ahnung, was Ihr Ziel ist) mit etwas wie folgt aus:

DECLARE @var NVARCHAR(255), @i INT; 

SET @i = 1; 

SELECT @var = AccountType FROM dbo.Account 
    WHERE AccountNumber = 200 
    AND AccountType LIKE '%Daily%'; 

CREATE TABLE #x(i INT PRIMARY KEY, c NCHAR(1), a NCHAR(1)); 

WHILE @i <= LEN(@var) 
BEGIN 
    INSERT #x 
    SELECT SUBSTRING(@var, @i, 1), ASCII(SUBSTRING(@var, @i, 1)); 

    SET @i = @i + 1; 
END 

SELECT i,c,a FROM #x ORDER BY i; 

könnten Sie auch tun, besser Reinigung dieser Daten betrachten vor es in Ihrem bekommt Datenbank. Reinigen Sie es jedes Mal, wenn Sie suchen oder anzeigen müssen, ist nicht der beste Ansatz.

+0

Danke. Gibt es eine bessere Methode als 'REPLACE'? Können wir nicht 'N' vor dem Parameterwert hinzufügen, anstatt REPLACE zu verwenden? – Lijo

+1

@ Lijo Ich verstehe es nicht. Erwarten Sie ein N-Präfix, um alle Charaktere, die Sie nicht mögen, magisch zu kennen und sie verschwinden zu lassen? Können Sie bitte zurück zu der Frage gehen und genauer erklären, was Sie zu tun versuchen? –

+5

* blink * * blink * – swasheck