Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 获取两个字符串之间的字符串-SQL Server_Sql Server 2008_Substring - Fatal编程技术网

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),我想零应该是第一个找到的字符的长度。不需要。