set @filename1 = '0_General_0_INV_57_xyz.xlsx';
我需要类似@name = xyz, @userid = 57, @type = INV
之类的输出。
答案 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函数