您必须根据空格 拆分此值并仅返回以冒号 : 开头的字段,我根据您需要的结果类型(表格或单值)提供了 2 个解决方案来实现此目的
表值函数
您可以创建一个 TV 函数来将此列拆分为一个表格:
CREATE FUNCTION [dbo].[GETVALUES]
(
@DelimitedString varchar(8000)
)
RETURNS @tblArray TABLE
(
ElementID int IDENTITY(1,1), -- Array index
Element varchar(1000) -- Array element contents
)
AS
BEGIN
-- Local Variable Declarations
-- ---------------------------
DECLARE @Index smallint,
@Start smallint,
@DelSize smallint
SET @DelSize = 1
-- Loop through source string and add elements to destination table array
-- ----------------------------------------------------------------------
WHILE LEN(@DelimitedString) > 0
BEGIN
SET @Index = CHARINDEX(' ', @DelimitedString)
IF @Index = 0
BEGIN
IF ((LTRIM(RTRIM(@DelimitedString))) LIKE ':%')
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(@DelimitedString)))
BREAK
END
ELSE
BEGIN
IF (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1)))) LIKE ':%'
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))
SET @Start = @Index + @DelSize
SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
END
END
RETURN
END
你可以像下面这样使用它:
DECLARE @SQLStr varchar(100)
SELECT @SQLStr = 'abc = :abc and this = :that and xyz = :asd'
SELECT
*
FROM
dbo.GETVALUES(@SQLStr)
结果:
标量值函数
如果您需要返回一个值(不是表格),那么您可以使用此函数返回由 分隔的所有值(换行符 + 回车符返回 CHAR(13) + CHAR(10))
CREATE FUNCTION dbo.GetValues2
(
@DelimitedString varchar(8000)
)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @Index smallint,
@Start smallint,
@DelSize smallint,
@Result varchar(8000)
SET @DelSize = 1
SET @Result = ''
WHILE LEN(@DelimitedString) > 0
BEGIN
SET @Index = CHARINDEX(' ', @DelimitedString)
IF @Index = 0
BEGIN
if (LTRIM(RTRIM(@DelimitedString))) LIKE ':%'
SET @Result = @Result + char(13) + char(10) + (LTRIM(RTRIM(@DelimitedString)))
BREAK
END
ELSE
BEGIN
IF (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1)))) LIKE ':%'
SET @Result = @Result + char(13) + char(10) + (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))
SET @Start = @Index + @DelSize
SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
END
END
return @Result
END
GO
你可以像下面这样使用它
DECLARE @SQLStr varchar(100)
SELECT @SQLStr = 'abc = :abc and this = :that and xyz = :asd'
SELECT dbo.GetValues2(@SQLStr)
结果
表格结果换行不可见,只需将数据复制到编辑器,它就会出现如图所示
参考文献