2013-02-12 62 views
7

我有一個名爲Account Type的數據庫,其中包含回車符和換行符(CHAR(10)和CHAR(13))。在SQL查詢中使用REPLACE查詢換行符/回車符

當我搜索這個值時,我需要做一個REPLACE如下所示。以下代碼正常工作。

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

我的問題是 - 其他字符是什麼(類似於CHAR(10)AMD CHAR(13)),將需要這樣的更換?

注意:該列的數據類型爲VARCHAR

注:該查詢從SQL Server Management Studio中

enter image description here

+3

我們不知道您的數據或您的要求,所以我們應該如何知道您需要替換哪些字符? – 2013-02-12 15:46:48

+0

@ dan1111。用戶可以輸入任何數據到數據庫中。所以所有角色都需要這樣的REPLACE。或者有沒有比REPLCAE更好的方法? – Lijo 2013-02-12 15:47:55

+2

那麼,你想要什麼字符?將任何字符(包括換行符)存儲在字段中是完全有效的。如果有一些你不想讓,那是因爲你的設計要求(我們不知道)。 – 2013-02-12 15:58:02

回答

8

有可能嵌入標籤(CHAR(9))等上運行。你可以找到你所需要的其他人物像這樣的東西來取代(我們不知道你的目標是什麼):

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; 

您也可以它進入您之前要考慮這樣做數據更好的清洗數據庫。每次需要搜索或顯示時清理它並不是最好的方法。

+0

謝謝。除了'REPLACE'還有更好的方法嗎?我們不能在參數值之前加上'N'而不是使用REPLACE? – Lijo 2013-02-12 16:00:07

+1

@李約我不明白。你是否期望一個N前綴能夠神奇地知道你不喜歡的所有角色,並讓它們消失?你能回到這個問題,並進一步澄清你想要做什麼? – 2013-02-12 16:03:32

+5

*閃爍* *閃爍* – swasheck 2013-02-12 16:05:09