Niestety nie będzie można przenieść funkcji CLR do SQL Azure. Będziesz musiał albo użyć normalnych funkcji ciągów (PATINDEX, CHARINDEX, LIKE itd.) albo wykonać te operacje poza bazą danych.
EDYTUJ Dodanie informacji do przykładów dodanych do pytania.
Adres e-mail
Ten jest zawsze kontrowersyjny, ponieważ ludzie nie zgadzają się co do tego, którą wersję RFC chcą wspierać. Oryginał na przykład nie zawierał apostrofów (a przynajmniej ludzie twierdzą, że tak nie było – nie wygrzebałem go z archiwów i sam go nie przeczytałem) i trzeba go dość często rozbudowywać o nowe TLD (raz dla 4-literowych domen TLD, takich jak .info, a następnie dla 6-literowych domen TLD, takich jak .museum). Często słyszę, jak całkiem znający się na rzeczy ludzie twierdzą, że doskonała walidacja poczty e-mail jest niemożliwa, a pracując wcześniej dla dostawcy usług pocztowych, mogę powiedzieć, że był to stale zmieniający się cel. Ale najprostsze podejścia znajdziesz w pytaniu TSQL Email Validation (bez regex ) .
Jedna cyfra
Prawdopodobnie najłatwiejszy z tej grupy:
WHERE @s LIKE '[0-9]';
Numery kart kredytowych
Zakładając, że usuniesz myślniki i spacje, co powinieneś zrobić w każdym przypadku. Zauważ, że nie jest to faktyczne sprawdzenie algorytmu numeru karty kredytowej, aby upewnić się, że sam numer jest rzeczywiście ważny, tylko że jest zgodny z ogólnym formatem (AmEx =15 cyfr zaczynających się od 3, reszta to 16 cyfr - Visa zaczyna się od 4, MasterCard zaczyna się od 5, Discover zaczyna się od 6 i myślę, że jest taki, który zaczyna się od 7 (chociaż może to być tylko pewnego rodzaju karty podarunkowe)):
WHERE @s + ' ' LIKE '[3-7]'+ REPLICATE('[0-9]', 14) + '[0-9 ]';
Jeśli chcesz być bardziej precyzyjny kosztem rozwlekłości, możesz powiedzieć:
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));
Numery telefonów w USA
Ponownie, zakładając, że najpierw usuniesz nawiasy, myślniki i spacje. Jestem prawie pewien, że numer kierunkowy w USA nie może zaczynać się od 1; jeśli istnieją inne zasady, nie jestem ich świadomy.
WHERE @s LIKE '[2-9]' + REPLICATE('[0-9]', 9);
-----
Nie zamierzam iść dalej, ponieważ wiele innych zdefiniowanych wyrażeń można ekstrapolować z powyższego. Mam nadzieję, że to daje początek. Powinieneś być w stanie Google dla niektórych innych, aby zobaczyć, jak inni ludzie replikowali wzorce za pomocą T-SQL. Niektóre z nich (np. dni tygodnia) można prawdopodobnie po prostu porównać z tabelą - wydaje się przesadą, aby wykonać dopasowanie wzorca inwazji dla zestawu 7 możliwych wartości. Podobnie z listą 1000 liczb lub lat, są to rzeczy, które znacznie łatwiej (i prawdopodobnie wydajniej) sprawdzić, czy wartość liczbowa znajduje się w tabeli, niż zamienić ją na ciąg i sprawdzić, czy pasuje do jakiegoś wzorca.
Powtórzę jeszcze raz, że wiele z tego będzie znacznie lepszych, jeśli będziesz w stanie wyczyścić i zweryfikować dane, zanim trafią one do bazy danych. Powinieneś dążyć do tego, gdy tylko jest to możliwe, ponieważ bez CLR po prostu nie możesz zrobić potężnego RegEx wewnątrz SQL Server.