残念ながら、CLR関数をSQLAzureに移動することはできません。通常の文字列関数(PATINDEX、CHARINDEX、LIKEなど)を使用するか、データベースの外部でこれらの操作を実行する必要があります。
編集 質問に追加された例の情報を追加します。
メールアドレス
人々はRFCのどのバージョンをサポートしたいかについて意見が分かれているため、これは常に物議を醸しています。たとえば、オリジナルはアポストロフィをサポートしていませんでした(または、少なくとも人々はサポートしていなかったと主張しています-確かに、アーカイブから掘り起こして自分で読んだことはありません)。 TLD(.infoのような4文字のTLDの場合は1回、.museumのような6文字のTLDの場合はもう一度)。非常に知識のある人が、完全な電子メール検証は不可能であると言うのをよく耳にします。以前は電子メールサービスプロバイダーで働いていたので、それは絶えず動いているターゲットだったと言えます。ただし、最も簡単なアプローチについては、質問 TSQLメール検証(正規表現なし)を参照してください。 ) 。
1桁の数字
おそらく最も簡単なもの:
WHERE @s LIKE '[0-9]';
クレジットカード番号
ダッシュとスペースを削除すると仮定します。これは、どのような場合でも実行する必要があります。これは、番号自体が実際に有効であることを確認するためのクレジットカード番号アルゴリズムの実際のチェックではなく、一般的な形式(AmEx =3から始まる15桁、残りは16桁)に準拠していることを確認することに注意してください-Visa 4で始まり、MasterCardは5で始まり、Discoverは6で始まり、7で始まるものがあると思います(ただし、それはある種のギフトカードである可能性があります)):
WHERE @s + ' ' LIKE '[3-7]'+ REPLICATE('[0-9]', 14) + '[0-9 ]';
長い時間をかけてもう少し正確になりたい場合は、次のように言うことができます。
WHERE (LEN(@s) = 15 AND @s LIKE '3' + REPLICATE('[0-9]', 14))
OR (LEN(@s) = 16 AND @s LIKE '[4-7]' + REPLICATE('[0-9]', 15));
米国の電話番号
繰り返しますが、最初に括弧、ダッシュ、スペースを削除するとします。米国の市外局番が1で始まることはできません。他のルールがある場合、私はそれらを認識していません。
WHERE @s LIKE '[2-9]' + REPLICATE('[0-9]', 9);
-----
あなたが定義した他の多くの式は上記から推定できるので、これ以上先に進むつもりはありません。うまくいけば、これはあなたにスタートを与えるでしょう。他の人がT-SQLでパターンをどのように複製したかを確認するために、他の人のためにGoogleにアクセスできるはずです。それらのいくつか(曜日など)は、おそらくテーブルに対してチェックすることができます-7つの可能な値のセットに対して侵入パターンマッチングを行うのはやり過ぎのようです。同様に、1000の数値または年のリストの場合、これらは、数値を文字列に変換して何らかのパターンに一致するかどうかを確認するよりも、数値がテーブルにあるかどうかを確認する方がはるかに簡単(そしておそらくより効率的)です。
そもそもデータベースに入る前にデータをクレンジングして検証できれば、これの多くははるかに優れていることをもう一度述べておきます。 CLRがないと、SQL Server内で強力な正規表現を実行できないため、可能な限りこれを実行するように努める必要があります。