2012-04-03 143 views
2

作爲ETL過程的驗證的一部分,我目前試圖複製其SES的函數剝去網址域和獨立的部分現有查詢查詢返回SQL錯誤消息537

我的查詢是以下:

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,但谷歌的搜索狀態「此錯誤是由傳遞一個負值的子字符串的長度參數引起的,左,右字符串函數」

是不是因爲我有空的URL字段,如果是的話,我如何修改上述查詢來補償?

回答

4

它可能是您的一些Referrer字符串不包含?字符。

如果沒有匹配,那麼PATINDEX將返回0

子串然後將嘗試1從指引字符串的字符得到爲-1。

您可能需要包裝的聲明與第二叫PATINDEX case語句,除非有人想出了一個更好的解決辦法:

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