根据下划线(_)将字符串拆分为N个部分

时间:2020-04-27 07:28:16

标签: sql-server

set @filename1  = '0_General_0_INV_57_xyz.xlsx';

我需要类似@name = xyz, @userid = 57, @type = INV之类的输出。

1 个答案:

答案 0 :(得分:0)

尝试一下-

首先创建自定义拆分功能

CREATE FUNCTION dbo.SplitString ( @stringToSplit VARCHAR(MAX), @Seperator varchar(1))
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX(@Seperator, @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(@Seperator, @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

 RETURN
END

Go

执行此-

declare @filename1 varchar(100)
set @filename1  = '0_General_0_INV_57_xyz.xlsx';
select * from dbo.SplitString (@filename1, '_')

*如果您具有SQL Server 2016及更高版本,则不需要自定义功能,因为SQL Server具有内置功能。 STRING_SPLIT *

declare @filename1 varchar(100)
set @filename1  = '0_General_0_INV_57_xyz.xlsx';

select * from STRING_SPLIT (@filename1, '_')

注意:仅SQL Server 2016或更高版本支持STRING_SPLIT函数

相关问题