Vous n'avez pas besoin CLR et RegEx pour cela.
DECLARE @x TABLE(id INT, url VARCHAR(2048));
INSERT @x VALUES
(1,'http://test.com/mary/archive/project.aspx'),
--> I want http::/test.com/mary
(2,'http://www.testmary.com/company'),
--> I want http://www.testmary.com/
(3,'http://marytest.com/b/about/'),
--> I want http://marytest.com/
(4,'http://mary.test.com/b/mary/project.aspx'),
--> I want http://mary.test.com/b/mary/
(5,'mary.test.com');
--> I want mary.test.com
SELECT ID,
[output] = SUBSTRING(url, 1, LEN(url) - CHARINDEX('yram', REVERSE(url))
+ COALESCE(NULLIF(CHARINDEX('/', SUBSTRING(url, LEN(url) - CHARINDEX('yram',
REVERSE(url)) + 1, 2048)),0),2048))
FROM @x
WHERE url LIKE '%mary%';
Résultats:
ID output
-- --------------------------------
1 http://test.com/mary/
2 http://www.testmary.com/
3 http://marytest.com/
4 http://mary.test.com/b/mary/
5 mary.test.com
La seule chose que je ne comprenais pas pourquoi la première ligne de la sortie doit être manquant une barre oblique, tandis que les autres lignes de l'inclure. Dans ma requête, cette barre oblique est incluse dans toutes les lignes. S'il ne doit pas être inclus uniquement sur cette ligne, vous devrez expliquer pourquoi.
Je recommande cependant de mieux gérer le nettoyage des données. Pourquoi autoriseriez-vous certaines URL sans le préfixe http: //?
Parce que je suis à la recherche de "mary" et d'arrêter la recherche jusqu'à ce que je trouve le dernier – user2726975