SQL SELECT子串使用变量

时间:2014-12-18 00:07:06

标签: sql sql-server-2005

我有以下查询:

SELECT 
    SUBSTRING('Message-ID=<6aasd2k4081-f6asdasc134-43asd45c-b2asd32429-a32ad410de78@comunic.local.test.global>, Authentication-Results',
    (SELECT CHARINDEX(' Message-ID=<','Message-ID=<6aasd2k4081-f6asdasc134-43asd45c-b2asd32429-a32ad410de78@comunic.local.test.global>, Authentication-Results') +1),
CHARINDEX('>, Authentication-Results', 'Message-ID=<6aasd2k4081-f6asdasc134-43asd45c-b2asd32429-a32ad410de78@comunic.local.test.global>, Authentication-Results') 
-CHARINDEX(' Message-ID=<','Message-ID=<6aasd2k4081-f6asdasc134-43asd45c-b2asd32429-a32ad410de78@comunic.local.test.global>, Authentication-Results') -1)

当我运行它时没问题(没有错误)。

我正在尝试做同样的事情,但现在使用一个具有select语句返回值的变量:

DECLARE @itemProp nvarchar(max);
set @itemProp=  (SELECT ItemProperties FROM [table1] where colID=1)

SELECT SUBSTRING(@itemProp,
(SELECT CHARINDEX(' Message-ID=<',@itemProp) +1),
CHARINDEX('>, Authentication-Results', @itemProp) 
-CHARINDEX(' Message-ID=<',@itemProp) -1)

当我运行此查询时,出现以下错误:

  

传递给SUBSTRING函数的长度参数无效。

select语句分配的@itemProp的值与第一个示例中的值相同:

'Message-ID=<6aasd2k4081-f6asdasc134-43asd45c-b2asd32429-a32ad410de78@comunic.local.test.global>, Authentication-Results'. 

另外,我使用的是SQL Server 2005。

感谢任何帮助 - 谢谢

1 个答案:

答案 0 :(得分:0)

您的查询正在寻找' Message-ID=<',开头有空格。这似乎不在字符串中。试试这个:

SELECT SUBSTRING(@itemProp,
                 CHARINDEX('Message-ID=<', @itemProp) +1,
----------------------------^
                 CHARINDEX('>, Authentication-Results', @itemProp) - CHARINDEX('Message-ID=<',@itemProp) -1
--------------------------------------------------------------------------------^
                )

请注意,指定位置没有空格。