2013-02-12 29 views
7

キャリッジリターンおよび改行文字(CHAR(10)およびCHAR(13))を持つデータベースタイプの名前付きデータベースがあります。改行文字/復帰改行文字のSQLクエリでのREPLACEの使用

この値を検索すると、以下のようにREPLACEを実行する必要があります。次のコードは正常に動作します。このよう置き換える必要があるだろう他のキャラクターものです(CHARに似(10)は、AMD CHAR(13)) -

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

私の質問はありますか?

注:列のデータ型はVARCHARです。

注:クエリはおそらく埋め込まれたタブ(CHAR(9))などが同様に存在するSQL Server Management Studioの

enter image description here

+3

データや要件が不明なので、どの文字を置き換える必要があるのでしょうか? –

+0

@ dan1111。ユーザーは任意のデータをデータベースに入力できます。だから、すべてのキャラクターがそのような交換を必要とするもの。あるいはREPLCAEよりも良い方法がありますか? – Lijo

+2

まあ、どんな文字を許可しますか?フィールドに改行を含む文字を格納することは完全に有効です。あなたが許可したくないものがある場合、それはあなたの設計要件(私たちが知らない)のためです。 –

答えて

8

から実行されます。あなたはこのようなもので(私たちはあなたの目標が何であるか見当がつかない)を交換するために必要なもの以外の文字を見つけることができます。

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'以外の方法がありますか? REPLACEを使用するのではなく、パラメータ値の前に 'N'を追加できませんか? – Lijo

+1

@Lijoわかりません。あなたが好きではないすべての文字を魔法のように知っているNプレフィックスが消えてしまいます。質問に戻り、あなたがしようとしていることを正確に明確にしてください。 –

+5

*点滅* *点滅* – swasheck