Sql server 2008 获取两个字符串之间的字符串-SQL Server
我得到了一个返回两个字符串之间字符串的函数:Sql server 2008 获取两个字符串之间的字符串-SQL Server,sql-server-2008,substring,Sql Server 2008,Substring,我得到了一个返回两个字符串之间字符串的函数: CREATE FUNCTION dbo.udf_GetStringBetween2Chars (@String VARCHAR(50), @FirstSpecialChar VARCHAR(50), @LastSpecialChar VARCHAR(50)) RETURNS VARCHAR(50) AS BEGIN DECLARE @FirstIndexOfChar INT, @LastIndexOfChar INT,
CREATE FUNCTION dbo.udf_GetStringBetween2Chars (@String VARCHAR(50), @FirstSpecialChar VARCHAR(50), @LastSpecialChar VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @FirstIndexOfChar INT,
@LastIndexOfChar INT,
@LengthOfStringBetweenChars INT
SET @FirstIndexOfChar = CHARINDEX(@FirstSpecialChar,@String,0)
SET @LastIndexOfChar = CHARINDEX(@LastSpecialChar,@String,@FirstIndexOfChar+1)
SET @LengthOfStringBetweenChars = @LastIndexOfChar - @FirstIndexOfChar -1
SET @String = SUBSTRING(@String,@FirstIndexOfChar+1,@LengthOfStringBetweenChars)
RETURN @String
END
但是,当我尝试获取POINTDESCRIPTION和DATAPOINT之间的字符串时,我得到错误:
SET ANSI_WARNINGS OFF
declare @table table
(string varchar(50))
insert into @table
select 'EVENT: ID Order Reassignment (Individual Job Specific Update)|||LOCATION: Reassign.reassign()|||DATEPOINTDESCRIPTION: Only specific ID orders were reassigned from user fatis to user blake.|||DATAPOINT: blake' union all
select 'EVENT: ID Order Reassignment (Individual Job Specific Update)|||LOCATION: Reassign.reassign()|||DATAPOINTDESCRIPTION: Only specific ID orders were reassigned from user ilevic to user manic2.|||DATAPOINT: manic2' union all
select 'EVENT: ID Order Reassignment (Individual Job Specific Update)|||LOCATION: Reassign.reassign()|||DATAPOINTDESCRIPTION: Only specific ID orders were reassigned from user links to user sepir.|||DATAPOINT: sepir'
select dbo.udf_GetStringBetween2Chars (Tab.string,'POINTDESCRIPTION: ','|||DATAPOINT')
FROM @table Tab
Msg 537, Level 16, State 2, Line 10
Invalid length parameter passed to the LEFT or SUBSTRING function.
有人知道为什么会发生这种情况吗?如果有人觉得它有用,下面是返回两个字符串之间字符串的最后一个函数:
CREATE FUNCTION dbo.udf_GetStringBetween2Chars (@String VARCHAR(500), @FirstSpecialChar VARCHAR(500), @LastSpecialChar VARCHAR(500))
RETURNS VARCHAR(500)
AS
BEGIN
DECLARE @FirstIndexOfChar INT,
@LastIndexOfChar INT,
@LengthOfStringBetweenChars INT
SET @FirstIndexOfChar = CHARINDEX(@FirstSpecialChar,@String,0)
SET @LastIndexOfChar = CHARINDEX(@LastSpecialChar,@String,@FirstIndexOfChar+1)
SET @LengthOfStringBetweenChars = @LastIndexOfChar - @FirstIndexOfChar -1
SET @String = SUBSTRING(@String,@FirstIndexOfChar+LEN(@FirstSpecialChar),@LengthOfStringBetweenChars)
RETURN @String
END
GO
并称之为:
select dbo.udf_GetStringBetween2Chars (tab.someString,'POINTDESCRIPTION: ','|||DATAPOINT')
FROM yourTable tab
我的坏:/I我通过增加temp table中字符串的长度来修复它:declare@table table(string varchar(500))哈哈,每次我都会这样!我确实注意到了我的函数中的一个缺陷:设置@FirstIndexOfChar=CHARINDEX(@FirstSpecialChar,@String,0),我想零应该是第一个找到的字符的长度。不需要。