web-dev-qa-db-fra.com

Comment créer une fonction dans SQL Server

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É

58
megastrong001

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.)

104
marc_s

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
12
Nicole Castle

Je peux donner un petit bidouillage, vous pouvez utiliser la fonction T-SQL. Essaye ça:

SELECT ID, PARSENAME(WebsiteName, 2)
FROM dbo.YourTable .....
5
Hamlet Hakobyan

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
4
Akki

Cela fonctionnera pour la plupart des noms de sites Web:

SELECT ID, REVERSE(PARSENAME(REVERSE(WebsiteName), 2)) FROM dbo.YourTable .....

1
Balaji