1. ホーム
  2. sql

[解決済み] 複数の値を同時に置換する - 文字列を数値に変換するために

2022-03-12 08:22:18

質問

varcharフィールドを数値に変換しようとしていますが、そのフィールドの中には、数値に変換するために削除しなければならない一般的な文字が含まれています。

フィールド名はUKSellPrice1です。

UKSellPrice1 を数値に変換する前に、以下の文字列を削除する必要があります。

'.00'
'£'
'n/a'
'$'
'#N/A'

どうすればいいのでしょうか?

今のところ、以下のようになっています。

;WITH R0 AS (

SELECT StyleCode
      ,ColourCode       
      ,UKSellPrice1= CASE WHEN CHARINDEX('.00',UKSellPrice1,1) > 0 
                          THEN REPLACE (UKSellPrice1,'.00','') 
                          ELSE UKSellPrice1 END
      ,UKSellPrice2
 FROM dbo.RangePlan
)
SELECT * 
FROM R0

解決方法は?

2つのアプローチが考えられますね。

1つ目は、ネストされた多数の replace() ステートメントを使用します。

select replace(replace(replace(col, '$', ''), '£', ''), 'n/a', '')

といった具合です。

もうひとつは、1桁目の数字を見つけ、そこから変換してみるというものです。 これには patindex() . 以下はその例である。

select cast(left(substring(col, patindex('%[0-9]%', col), 1000),
                 patindex('%[^0-9]%', substring(col, patindex('%[0-9]%', col), 1000)) - 1
                ) as int)