S'il vous plaît, aidez-moi, comment filtrer des mots en SQL en utilisant une fonction?
Je vais avoir du mal si je l'explique, alors je donne l'exemple:
ID | WebsiteName |
-----------------------------------
1 | www.yahoo.com |
2 | www.google.com |
3 | www.youtube.com |
Ce que je veux, c'est comment obtenir le nom du site. Je veux sélectionner l'enregistrement avec une sortie comme celle-ci. Comment enlever le 'www.' et '.com' dans le dossier.
ID | WebsiteName
--------------------------
1 | yahoo
merci pour l'aide. :RÉ
Que dis-tu de ça?
CREATE FUNCTION dbo.StripWWWandCom (@input VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @Input
SET @Work = REPLACE(@Work, 'www.', '')
SET @Work = REPLACE(@Work, '.com', '')
RETURN @work
END
et ensuite utiliser:
SELECT ID, dbo.StripWWWandCom (WebsiteName)
FROM dbo.YourTable .....
Bien sûr, ceci est sévèrement limité en ce sens qu'il ne supprimera que www.
au début et .com
à la fin - rien d'autre (donc cela ne fonctionnera pas sur d'autres hôtes noms de machine tels que smtp.yahoo.com
et d'autres domaines Internet tels que .org
, .edu
, .de
, etc.)
Celui-ci obtient tout entre le "." personnages. Veuillez noter que cela ne fonctionnera pas pour des URL plus complexes telles que "www.somesite.co.uk" Idéalement, la fonction vérifierait le nombre d'instances de "." caractère et choisissez la sous-chaîne en conséquence.
CREATE FUNCTION dbo.GetURL (@URL VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @URL
SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, LEN(@work))
SET @Work = SUBSTRING(@work, 0, CHARINDEX('.', @work))
--Alternate:
--SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, CHARINDEX('.', @work) + 1)
RETURN @work
END
Je peux donner un petit bidouillage, vous pouvez utiliser la fonction T-SQL. Essaye ça:
SELECT ID, PARSENAME(WebsiteName, 2)
FROM dbo.YourTable .....
Vous pouvez utiliser des éléments à la place de replacement pour éviter le bogue mentionné par Hamlet Hakobyan.
CREATE FUNCTION dbo.StripWWWandCom (@input VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @Input
--SET @Work = REPLACE(@Work, 'www.', '')
SET @Work = Stuff(@Work,1,4, '')
SET @Work = REPLACE(@Work, '.com', '')
RETURN @work
END
Cela fonctionnera pour la plupart des noms de sites Web:
SELECT ID, REVERSE(PARSENAME(REVERSE(WebsiteName), 2)) FROM dbo.YourTable .....