2013-08-28 1 views
0

Je dois obtenir le nom d'hôte & pathname à partir d'une URL en utilisant l'expression régulière.SQL SERVER get nom d'hôte et chemin d'accès mais pas de paramètres

URL peut être sous forme de

a) http://test.com/mary/archive/project.aspx -> Je veux http::/test.com/mary
b) http://www.testmary.com/company -> Je veux http://www.testmary.com/
c) http://marytest.com/b/about/ -> Je veux http://marytest.com/
d) Fondamentalement, je cherche des enregistrements qui ont url "mary" et obtenir seulement nom d'hôte ou pathname selon où "mary" est.

Toute aide est appréciée.

Merci R

+0

Parce que je suis à la recherche de "mary" et d'arrêter la recherche jusqu'à ce que je trouve le dernier – user2726975

Répondre

2

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: //?

+0

@ user2726975 avez-vous un cas de bord que vous n'avez pas inclus dans la question? Pourquoi ne l'avez-vous pas inclus dans la question? –

+0

Cela ne fonctionnera pas si l'entrée est de la forme http://mary.test.com – user2726975

+0

J'ai une table avec des millions de dossiers et j'essaie d'obtenir tous les cas de coin afin que tout soit couvert. Quand je l'ai couru aujourd'hui, celui-ci n'a pas fonctionné .. – user2726975