За съжаление, няма да можете да преместите вашата CLR функция(и) в SQL Azure. Ще трябва или да използвате нормалните низови функции (PATINDEX, CHARINDEX, LIKE и т.н.) или да извършите тези операции извън базата данни.
РЕДАКТИРАНЕ Добавяне на информация за примерите, добавени към въпроса.
Имейл адрес
Това винаги е противоречиво, защото хората не са съгласни коя версия на 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.