web-dev-qa-db-ja.com

MSSQL正規表現

次の正規表現があります:^ [-A-Za-z0-9 /.]+$

これは現在、テキストボックスに入力された値がこれと一致するかどうかをチェックします。そうでない場合は、エラーがスローされます。

これに一致しないものがデータベースに既に入っているかどうかを確認する必要があります。

疲れた:

 SELECT * FROM *table* WHERE ([url] NOT LIKE '^[-A-Za-z0-9/.]+$') 
 SELECT * FROM *table* WHERE PATINDEX ('^[-A-Za-z0-9/.]+$', [url])

[〜#〜] update [〜#〜]

そのため、少し調べてみると、REGEXPを使用できないと思いました。

このようなことができると思いましたか?期待どおりの結果は得られませんが、他とは違って動作します。誰でもそれで間違っていることを見つけることができますか?

SELECT *, 
  CASE WHEN [url] LIKE '^[-A-Za-z0-9/.]+$' 
    THEN 'Match' 
    ELSE 'No Match' 
  END Validates
FROM 
  *table*
17

ご協力ありがとうございます。

これは私が最後に使用したものです:

SELECT *, 
  CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%' 
    THEN 'Valid' 
    ELSE 'No valid' 
  END [Validate]
FROM 
  *table*
  ORDER BY [Validate]
15

免責事項:元の質問はMySQLに関するものでした。 SQL Serverの答えは以下のとおりです。

MySQL

MySQLでは、正規表現の構文は次のとおりです。

SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$') 

REGEXPの代わりにLIKE句を使用します。後者は、%および_ワイルドカードを使用したパターンマッチング用です。


SQLサーバー

タイプミスをして、MySQLではなくSQL Serverを使用しているため、正規表現機能を公開するためにユーザー定義のCLR関数を作成する必要があります。

詳細については この記事 をご覧ください。

15