2017-08-17 12 views
3

数値を表すべきいくつかのフィールドを見つけたテーブルを調べていますが、ソースは文字、記号、数字が混在しているため、ソースはExcelファイルです。SQLは任意の文字を0に変換します0

SELECT 
    CASE 
     WHEN Montant_Devise LIKE '%Free%' THEN '0' 
     WHEN Montant_Devise LIKE ' ' THEN '0' 
     WHEN Montant_Devise = '' THEN '0' 
     WHEN Montant_Devise = '-' THEN '0' 
     ELSE CAST(COALESCE(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(Montant_Devise, '€', ''), ' ', ''), ',', '.'))), '0') AS DECIMAL(20,2)) 
    END 
FROM 
    [dbo].[table_BI] 

ので、取り引きここに:

私は、これらのフィールドをクリーンアップしようとしているが、私はそう、現在のシンボルの、あまりにも多くの種類を見つけることができますが、私のような例カップルとクリーニングを行ってきましたおそらく私は新しいシンボルを私の場合に含めて避けるよりも将来的に新しいシンボルを見つけるかもしれません。どのシンボルを置き換えることができますか?

私はこれをどうやってできるか知っていますか?その後

CASE WHEN patindex(Montant_Devise '%[^0-9]%' > 0 '0' 

おかげ

+1

あなただけのデフォルトで0にこのフィールドを設定することができませんか?達成しようとしていること、多分いくつかの入力と出力の例について、より明確に説明することができますか? –

+0

デフォルトで@JoshAdamsをチェックしてください。フィールドはすでに数字、文字、記号の間に入り込んでいます –

+0

これは完全にはっきりしていません。あなたがしようとしていることをより具体的にするためにあなたの投稿を編集し、自分で問題を解決する努力をしてください。 –

答えて

3

パフォーマンスが低下する関数なしでこれを行う方法はありません。そこには多くの人がいます。ここに1つあります。関数の中であなただけの

を変更することにより、非数値を削除することができます

CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 
    WHILE PATINDEX('%[^0-9]%', @strText) > 0 
    BEGIN 
     SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '0') 
    END 
    RETURN @strText 
END 

実行

declare @table table (x varchar(64)) 
insert into @table 
values 
('332148790832473487...DFSKDJFH&#@[email protected]#'), 
('0X0C0V1234') 

update t 
set x = dbo.RemoveNonNumericCharacters(t.x) 
from @table t 

select * from @table 

RETURNSまた

x 
33214879083247348700000000000000000 
00000

に...

STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')

2

スタートは空の文字列を行います。その後、あなたの他をしてください。

+1

のバディを使用するスクリプトタスクを書くことができます。 –

関連する問題