2012-01-19 4 views
2

私は私のようなZに、特殊文字からすべてのアルファベットのチェックを実行したいのMicrosoft SQL Server 2008のSQLクエリ - すべてのアルファベットのための正規表現パターン

で働いています:「:」と「 - 」のために私のテーブルの一つの列の値。

「:」と「 - 」を解決できます。 AからZまでの間の値をどのように考慮しますか?

私はこのようなものを試しましたが、私にとっては置き換えのオプションを実行しません。アルファベットが交換されません222222222と2G23222

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('Joe Wang', '666 2323', 222222222); 

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('John Doe','666 2323', '2G23:22-2'); 

UPDATE dbo.Employee 

SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '') 

WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal LIKE '%[A-Z]%'; 

は、私が 'サル' の値として取得します。

正規表現のパターンをオンラインでチェックし、AからZまでのすべてのアルファベットに対して[A-Z]を取得しました。私のSQLはどこかで間違っていますか? [0-9]のどちらかを代用すると動作しません。

助けてください。 ありがとうございます。

答えて

0

REPLACEステートメントが文字を置き換えようとしないため、REPLACEでパターンマッチを使用できないため、エラーが発生しています。

有効な文字(Numbers?)と一致しない文字を見つけようとする代わりに、別の方法を試してから、その文字を置き換えてください。

Here's a blog post that contains a UDF that does just this:あなたは、その後のように、あなたの更新文を書くことができ

CREATE FUNCTION dbo.UFNG_ONLY_DIGITS (@StrVal AS VARCHAR(max)) 
RETURNS VARCHAR(max) 
AS 
BEGIN 
     WHILE PATINDEX('%[^0-9]%', @StrVal) > 0 
      SET @StrVal = REPLACE(@StrVal, 
       SUBSTRING(@StrVal,PATINDEX('%[^0-9]%', @StrVal),1),'') 
     RETURN @StrVal 
END 

UPDATE dbo.Employee 
SET Sal = dbo.UFNG_ONLY_DIGITS (Sal) 
WHERE PATINDEX('%[^0-9]%', Sal) > 0 

これは非常に効果的なアプローチではありませんが、これはただ1回のクリーンアップであれば、私はそれが問題であるとは思わない。

0

クエリでREGEXP[:alpha]のメイク使用

UPDATE dbo.Employee SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '')  
      WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal REGEXP '[:alpha]'; 

DOCUMENTATION のようなものに、これはあなた

役立つことを願っています
関連する問題