查询返回SQL错误消息537

时间:2012-04-03 11:51:12

标签: sql sql-server sql-server-2008

作为验证ETL过程的一部分,我目前正在尝试复制现有查询,该查询将一个函数剥离到域并分离部分

我的查询如下:

SELECT substring(Referrer , 1, patindex('%?%', Referrer) - 1) as URL
FROM dbo.tableA MRD
JOIN dbo.tableB mm
ON mm.MetId = MRD.MetId
AND mm.MetId = 4

查询返回结果集和错误。

Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.

还在学习SQL,但谷歌搜索状态'这个错误是由于将负值传递给SUBSTRING,LEFT和RIGHT字符串函数的长度参数'

是不是因为我有空的URL字段,如果有,我怎么能修改上面的查询来补偿?

1 个答案:

答案 0 :(得分:4)

可能您的某些Referrer字符串不包含?字符。

如果没有匹配,则PATINDEX将返回0.

子字符串将尝试从引用者字符串中获取字符1到-1。

除非有人提出更好的解决方法,否则您可能需要将语句包装在case语句中,并使用第二个调用PATINDEX

select 
    case patindex('%?%', Referrer)
       when 0 then Referrer
       else substring(Referrer , 1, patindex('%?%', Referrer) - 1) 
    end as URL
from dbo.tableA MRD
    JOIN dbo.tableB mm
      ON mm.MetId = MRD.MetId
        AND mm.MetId = 4