К сожалению, вы не сможете переместить свои функции CLR в SQL Azure.Вам нужно будет либо использовать обычные строковые функции (PATINDEX, CHARINDEX, LIKE и т. Д.), Либо выполнить эти операции вне базы данных.
EDIT Добавление некоторой информации для добавленных примеровна вопрос.
Адрес электронной почты
Этот вопрос всегда противоречив, потому что люди не согласны с тем, какую версию RFC они хотят поддержать.Например, оригинал не поддерживал апострофы (или, по крайней мере, люди настаивают на том, что это не так - я не выкопал его из архивов и не читал сам, по общему признанию), и его приходится часто расширять для новыхTLD (один раз для 4-буквенных TLD, таких как .info, затем снова для 6-буквенных TLD, таких как .museum).Я часто слышал, что достаточно знающие люди утверждают, что совершенная проверка электронной почты невозможна, и, ранее работая в поставщике услуг электронной почты, я могу сказать вам, что это была постоянно меняющаяся цель.Но для самых простых подходов см. Вопрос Проверка подлинности электронной почты TSQL (без регулярных выражений) .
Одна цифровая цифра
Вероятно, самая простая изСвязка:
WHERE @s LIKE '[0-9]';
Номера кредитных карт
Предполагается, что вы удаляете тире и пробелы, что вы должны сделать в любом случае.Обратите внимание, что это не фактическая проверка алгоритма номера кредитной карты, чтобы убедиться, что сам номер действительно действителен, просто он соответствует общему формату (AmEx = 15 цифр, начинающихся с 3, остальные 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);
-----
Я не собираюсь идти дальше, потому чтоМногие другие выражения, которые вы определили, могут быть экстраполированы из вышеприведенного.Надеюсь, это даст вам начало.Вы должны быть в состоянии Google для некоторых других, чтобы видеть, как другие люди копировали образцы с T-SQL.Некоторые из них (например, дни недели), вероятно, можно просто сравнить с таблицей - кажется чрезмерным делать сопоставление с образцом вторжения для набора из 7 возможных значений.Аналогично списку из 1000 чисел или лет это гораздо проще (и, вероятно, более эффективно) проверить, находится ли числовое значение в таблице, а не преобразовать его в строку, и посмотреть, соответствует ли оно некоторому шаблону.
Еще раз скажу, что многое из этого будет намного лучше, если вы сможете очистить и проверить данные, прежде чем они попадут в базу данных.Вы должны стремиться делать это везде, где это возможно, потому что без CLR вы просто не сможете создать мощный RegEx внутри SQL Server.