2013-02-12 15 views
7

Mam bazę danych o nazwie Typ konta, która zawiera znaki powrotu karetki i znaki nowej linii (CHAR (10) i CHAR (13)).Użycie REPLACE w zapytaniu SQL dla znaków powrotu nowej linii/karetki

Kiedy szukam tej wartości, muszę wykonać REPLACE, jak pokazano poniżej. Poniższy kod działa poprawnie.

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%' 

Moje pytanie brzmi - jakie są inne znaki (podobnie jak Char (10) amd CHAR (13)), które potrzebują takiego zastąpić? Uwaga: Typ danych dla kolumny to VARCHAR.

Uwaga: Zapytanie jest uruchamiany z SQL Server Management Studio

enter image description here

+3

Nie znamy twoich danych ani twoich wymagań, więc skąd mamy wiedzieć, jakie znaki musisz zastąpić? –

+0

@ dan1111. Użytkownik może wprowadzać dowolne dane do bazy danych. A więc, co każda postać potrzebuje takiego REPLACE. Czy istnieje lepsza metoda niż REPLCAE? – Lijo

+2

cóż, na jakie znaki chcesz zezwolić? Znakomicie nadaje się do przechowywania dowolnych znaków, w tym znaków nowej linii, w polu. Jeśli są takie, na które nie chcesz pozwolić, wynika to z Twoich wymagań projektowych (o których nie wiemy). –

Odpowiedz

8

prawdopodobnie istnieją wbudowane zaczepy (CHAR(9)) itp, jak również. Można dowiedzieć się, jakie inne znaki trzeba wymienić (nie mamy pojęcia, co twoim celem jest) z mniej więcej tak:

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; 

Można również rozważyć robi lepsze oczyszczenie tych danych przed to dostanie się do Baza danych. Czyszczenie go za każdym razem, gdy trzeba szukać lub wyświetlać, nie jest najlepszym podejściem.

+0

Dzięki. Czy istnieje lepsza metoda niż "REPLACE"? Czy nie możemy dodać 'N' przed wartością parametru zamiast REPLACE? – Lijo

+1

@Lijo Nie rozumiem. Czy spodziewasz się, że prefiks N w magiczny sposób zna wszystkie znaki, których nie lubisz, i sprawi, że znikną? Czy możesz wrócić do pytania i dokładniej wyjaśnić, co próbujesz zrobić? –

+5

* miga * * miga * – swasheck

Powiązane problemy