作为验证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字段,如果有,我怎么能修改上面的查询来补偿?
答案 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