当没有结果时,使用子字符串的列分组失败

时间:2014-01-03 20:09:54

标签: sql-server-2008 tsql

我有一个使用SUBSTRING来获取列值的CTE。 该子串构建了一些组合函数(REVERSE,CHARINDEX)以获得正确的位置和长度。使用此CTE的查询将该列放在GROUP BY中。

这很好用。但如果CTE中根本没有结果,那就不行了。

然后,我收到了这个错误:

Invalid length parameter passed to the LEFT or SUBSTRING function.

我在stackoverflow上看到了很多这样的消息,但不是这种情况。有谁知道这个问题,我该怎么办呢?

为了说明我的问题,一些没有REVERSE函数的简化代码:

;WITH #mycte AS(
SELECT p.[CreatedDate] AS CreatedDate, 
SUBSTRING(p.[value], 
     CHARINDEX('starttag', p.[value])+16, 
      (CHARINDEX('endtag', p.[value] - CHARINDEX('starttag', p.[value])
) AS Remark

SELECT COUNT(*), CreatedDate, Remark FROM #mycte GROUP BY Remark

1 个答案:

答案 0 :(得分:2)

我认为你需要改变:

p.[value]

要:

ISNULL(p.[Value],0)