Как создать функцию в SQL Server
Пожалуйста, помогите мне, как фильтровать слова в SQL с помощью функции?
Мне сложно, если я объясню это, я приведу пример:
ID | WebsiteName |
-----------------------------------
1 | www.yahoo.com |
2 | www.google.com |
3 | www.youtube.com |
Я хочу, как получить имя веб-сайта. Я хочу выбрать запись с выходом вроде этого. Как удалить "www." и ".com" в записи.
ID | WebsiteName
--------------------------
1 | yahoo
спасибо за помощь.: D
Ответы
Ответ 1
Как насчет этого?
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
а затем используйте:
SELECT ID, dbo.StripWWWandCom (WebsiteName)
FROM dbo.YourTable .....
Конечно, это строго ограниченный тем, что он будет только отбрасывать www.
в начале и .com
в конце - ничего больше (поэтому он не будет работать на другой хост-машине имена, такие как smtp.yahoo.com
и другие интернет-домены, такие как .org
, .edu
, .de
и т.д.)
Ответ 2
Этот получает все, что находится между "." персонажи. Обратите внимание, что это не будет работать для более сложных URL-адресов, таких как "www.somesite.co.uk". В идеале функция будет проверять, сколько экземпляров "." и выберите подстроку соответственно.
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
Ответ 3
Я могу дать небольшой взлом, вы можете использовать функцию T-SQL. Попробуйте следующее:
SELECT ID, PARSENAME(WebsiteName, 2)
FROM dbo.YourTable .....
Ответ 4
Вы можете использовать материал вместо замены, чтобы избежать ошибки, о которой упоминал Гамлет Акопян
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
Ответ 5
Это будет работать для большинства имен веб-сайтов:
SELECT ID, REVERSE(PARSENAME(REVERSE(WebsiteName), 2)) FROM dbo.YourTable.....