SQL Server equivalent of substring_index function in MySQL

后端 未结 5 568
旧巷少年郎
旧巷少年郎 2020-11-29 11:17

I am trying to port a query from MySQL to SQL SERVER 2012.

How do i write an equivalent for MySQL\'s substring_index()?

MySQL SUBSTRING_INDEX() returns the

5条回答
  •  攒了一身酷
    2020-11-29 12:07

    This microsoft sql function Works exactly like substring_index function in mysql

    /** This microsoft sql function Works exactly like substring_index function in mysql **/
      
    CREATE FUNCTION SubString_Index
    (
       @ExistingString NVARCHAR(MAX),
       @BreakPoint NVARCHAR(MAX),
       @number INT
    )
    RETURNS NVARCHAR(MAX)
    AS
    BEGIN
    DECLARE @Count INT
    DECLARE @SubstringLength INT
    DECLARE @Substring NVARCHAR(MAX)
    DECLARE @ssubstring NVARCHAR(MAX)
    SET @ssubstring=@ExistingString
    DECLARE @scount INT
    SET @scount=0
    DECLARE @sscount INT
    SET @sscount=0
    DECLARE @number2 INT
    DECLARE @occurence INT
    SET @occurence=LEN(@ExistingString) - LEN(REPLACE(@ExistingString, @BreakPoint, ''))
    If @number<0
         BEGIN
            SET @number2= @occurence-(-1*@number)+1
         END
    If @number>0
         BEGIN
            SET @number2=@number
         END
    WHILE(@number2>@scount)
        BEGIN
                Select @Count=CHARINDEX(@BreakPoint,@ExistingString)
                Select @SubstringLength=@Count+LEN(@BreakPoint) 
                Select @ExistingString=SUBSTRING(@ExistingString,@SubstringLength,LEN(@ExistingString)-@Count)
                Select @scount=@scount+1 
                select @sscount=@sscount+@Count
        END
    If @number<0
         BEGIN
            if (@number = -1) and (@sscount+LEN(@BreakPoint)) = (LEN(@ssubstring)+1)
                BEGIN
                   SELECT @Substring=''
                END
            else if @occurence = 0
                BEGIN
                   SELECT @Substring=''
                END
            else
                BEGIN
                   SELECT @Substring=SUBSTRING(@ssubstring, @sscount+LEN(@BreakPoint), LEN(@ssubstring))
                END
         END
    If @number>0
        if @occurence = 0
                BEGIN
                   SELECT @Substring=''
                END
            else
                BEGIN
                   SELECT @Substring=SUBSTRING(@ssubstring,0,@sscount)
                END
    
    RETURN @Substring
    END
    GO
    
    

提交回复
热议问题