1. ホーム
  2. tsql

[解決済み] 非数字を削除するセレクトクエリ

2023-06-02 10:46:47

質問

可変長アルファベットを持つカラムにダーティなデータがあります。私は、0-9 以外のものを取り除きたいだけです。

関数やプロシージャを実行したいわけではありません。テキストの後に数値を取得するだけの似たようなスクリプトがありますが、それは次のようなものです。

Update TableName
set ColumntoUpdate=cast(replace(Columnofdirtydata,'Alpha #','') as int)
where Columnofdirtydata like 'Alpha #%'
And ColumntoUpdate is Null

アルファ # 12345789 という形式でいいと思っていたデータフィールドのいくつかがそうでないことがわかるまでは、かなりうまくいくと思っていました。

ストリップする必要があるデータの例

AB ABCDE # 123
ABCDE# 123
AB: ABC# 123

123だけ欲しいです。確かに、すべてのデータフィールドには、数字の前に#がありますね。

substringとPatIndexを試したのですが、構文がおかしいのか何なのか、よくわかりません。どなたか、これに対処する最良の方法についてアドバイスがありますか?

どのように解決するのですか?

こちらをご覧ください。 ブログ記事 を参照してください。 以下は、例に挙げた文字列を使ったサンプルです。

DECLARE @textval NVARCHAR(30)
SET @textval = 'AB ABCDE # 123'

SELECT LEFT(SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000),
           PATINDEX('%[^0-9.-]%', SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000) + 'X') -1)