developer tip

SQL Server에서 함수를 만드는 방법

optionbox 2020. 12. 11. 08:04
반응형

SQL Server에서 함수를 만드는 방법


함수를 사용하여 SQL에서 단어를 필터링하는 방법을 도와주세요.

설명하면 힘들어서 예를 들어 보겠습니다.

ID       |       WebsiteName      |
-----------------------------------
1        |      www.yahoo.com     |
2        |      www.google.com    |
3        |      www.youtube.com   |

내가 원하는 것은 웹 사이트의 이름을 얻는 방법입니다. 이와 같은 출력이있는 레코드를 선택하고 싶습니다. 'www.'를 제거하는 방법 기록에 '.com'이 있습니다.

ID      |      WebsiteName
--------------------------    
1       |        yahoo

도와 주셔서 감사합니다. :디


이건 어때?

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


이것은 "."사이의 모든 것을 얻습니다. 문자. "www.somesite.co.uk"와 같은 더 복잡한 URL에서는 작동하지 않습니다. 이상적으로이 함수는 "."의 인스턴스 수를 확인합니다. 문자를 입력하고 그에 따라 하위 문자열을 선택합니다.

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

작은 해킹을 할 수 있고 T-SQL 기능을 사용할 수 있습니다. 이 시도:

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

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

이것은 대부분의 웹 사이트 이름에서 작동합니다.

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

참고 URL : https://stackoverflow.com/questions/14550486/how-to-create-a-function-in-sql-server

반응형