SQL 分割字符串函数 (sqlserver不自带)

create FUNCTION [dbo].[GetSplitStringValueInIndex]
(
    @originalStr     VARCHAR(1024),    
    @split           VARCHAR(10),    
    @index           INT 
)
RETURNS VARCHAR(1024)
AS
BEGIN
    DECLARE @location INT; 
    DECLARE @start INT;
    DECLARE @next INT; 
    DECLARE @seed INT; 
    
    SET @originalStr = LTRIM(RTRIM(@originalStr));
    SET @start = 1;
    SET @next = 1;
    SET @seed = LEN(@split);
    
    SET @location = CHARINDEX(@split, @originalStr);
    
    WHILE @location <> 0
          AND @index > @next
    BEGIN
        SET @start = @location + @seed;
        SET @location = CHARINDEX(@split, @originalStr, @start);
        SET @next = @next + 1;
    END
    
    IF @location = 0
        BEGIN
            SELECT @location = LEN(@originalStr) + 1;
        END    
    RETURN SUBSTRING(@originalStr, @start, @location -@start);
END

分割后求并集

select * from (
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',1) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',2) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',3) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',4) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',5) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',6) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',7) 主机厂代码,主机市场  from 常用产品Test
union
select 产品代号,[dbo].[GetSplitStringValueInIndex](主机厂代码,'/',8) 主机厂代码,主机市场  from 常用产品Test
) xx  where 产品代号='B08601000'

 

posted @ 2022-11-30 12:05  CelonY  阅读(324)  评论(0)    收藏  举报