2016-06-30 22 views
-2

SQLで定義された文字列出力から非標準文字を除外しようとしていますが、かなりの数がありますので、私はそれを働かせることができません。助言がありますか?SQLのdefind文字列出力から非標準文字を取り除く

select distinct( CASE (SORT_CODE 
      + cast(replicate('0',8-len(ACCOUNT_NUMBER)) 
      + ACCOUNT_NUMBER as char(8)) 
      + '0' 
      + '17' --to be replaced by a check for a specific type 
      + cast (replicate('0',11-len(replace(CURRENT_CHARGE_INCL,'.',''))) + replace(CURRENT_CHARGE_INCL,'.','') as char(11)) 
      + cast(left(LAST_NAME, 10) + replicate(' ',18) as char(18)) + upper(cast(TRADING_NAME + replicate(' ',18) as char(18)))) 

      WHEN '.' THEN ' ' 
      WHEN '&' THEN ' ' 
      WHEN ',' THEN ' ' 
      else DD_line 
      END) 
      as DD_LINE 
+0

なぜですかACCOUNT_NUMBERに数字以外のものがありますか? ACCOUNT_NUMBER_IDなどの名前を付ける必要はありませんか? –

+2

[tag:sql]でこれをタグ付けしたときに警告が表示されているはずです。なぜあなたはアドバイスに従っておらず、RDBMSまたはSQL Flavorを使用しているタグを追加しましたか? Microsoft SQL Serverのように見えます – rene

+0

何が問題なのですか?あなたの入力はどのように見え、あなたの予想される現在の出力は何ですか?おそらく、http://sqlfiddle.com/ – rene

答えて

1

問題は、あなたの声明が読んでいないと思われることです。代わりに

SELECT DISTINCT CASE WHEN @string = '.' THEN ' ' 
        WHEN @string = '&' THEN ' ' 

、あなたがコードを気づく潜在的に怒ら列/変数のCASEのステートメントを実行します。 あなたの文は、基本的に次のように読み込まれます。 CREATEの権利をお持ちの場合は、UDFを使用して、各部分についてこれを処理するか、正しく書き出してください。あなたのコードは読みやすくなります。

残念ながら、あなたはどこ問題のある文字は文で提供されていませんでしたので、この例のようなもので十分する必要があります:。

select distinct( (SORT_CODE 
      + cast(replicate('0',8-len( 
             CASE WHEN CHARINDEX('.', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ') 
              WHEN CHARINDEX('&', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ') 
              WHEN CHARINDEX(',', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ') END 
            ))) 
      + CAST(CASE WHEN CHARINDEX('.', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '.', ' ') 
          WHEN CHARINDEX('&', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, '&', ' ') 
          WHEN CHARINDEX(',', ACCOUNT_NUMBER) <> 0 THEN REPLACE(ACCOUNT_NUMBER, ',', ' ') 
          ELSE DD_LINE END as char(8)) 
         ) 
       ) 

コピー&ペーストが私をやったのxD

+0

あなたは、(いつでも '。'の代わりに)対応する文字をREPLACEにも入れます。 ;-) – Tyron78

+1

@ルネハハ! #copypasteOP私は例を調整しました。xD –

+0

私の最初に投稿された質問に提供されたfrendlyヘルプに感謝します。私は解決策を試してみる。 –

0

アルファ以外の文字をすべて削除する素晴らしい方法を見つけました。スペースがないと、他の人には役に立ちます。その後、下の関数を作成しますので、それを使用する:dbo.RemoveNonAlphaCharacters(TRADING_NAME)

OBJECT_ID(N'dbo.RemoveNonAlphaCharacters'、N'FN ')はNULL
のDROP FUNCTIONのRemoveNonAlphaCharactersされていない場合は、

go 

機能[DBO]。[RemoveNonAlphaCharacters](@一時VARCHAR(1000))を作成します 戻り値VARCHAR(1000) AS

Declare @KeepValues as varchar(50) 
Set @KeepValues = '%[^a-z ]%' 
While PatIndex(@KeepValues, @Temp) > 0 
    Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '') 

Return @Temp 

エンド

を行く開始

クレジット、Gマストロス