这是我在这里的第一篇文章,我也是开发中的新手。 无论如何..我的问题是:
sql语句:
SELECT left(clienti.SedeLegaleIndirizzo, patindex('%[0-9]%',clienti.SedeLegaleIndirizzo))
AS indirizzo from Clienti
clienti.SedeLegaleIndirizzo
是clienti
表,SedeLegaleIndirizzo
是包含streen和number的地址的列。
我想将街道与数字分开但是我的声明我得到了第一个数字的街道。正如我从charindex知道的,我可以在最后一个参数中添加-1,但问题是如果我将该参数与patindex一起使用,它会返回此错误:
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
我正在使用patindex而不是charindex,因为我正在搜索一个数字......
有什么人的建议?
答案 0 :(得分:0)
我并不完全清楚你放置-1
的位置,但看起来你正在这样做:
SELECT left(clienti.SedeLegaleIndirizzo,
patindex('%[0-9]%', clienti.SedeLegaleIndirizzo)-1)
如果找不到该号码,则会出现问题,因为patindex()
会0
和0-1=-1
。您的left()
长度不能为-1
。我在这些情况下的解决方案是:
SELECT left(SedeLegaleIndirizzo,
isnull(nullif(patindex('%[0-9]%', SedeLegaleIndirizzo)-1, -1), 0))
这确保了如果找不到该号码,则代替left(SedeLegaleIndirizzo, -1)
代码将导致left(SedeLegaleIndirizzo, 0)
并且只是给出一个空字符串。
答案 1 :(得分:0)
您收到错误的原因很可能是由于没有数字的行会导致patindex(...) -1
的结果为负。
一种解决方案是排除这些行:
SELECT LEFT(clienti.SedeLegaleIndirizzo, PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) - 1)
AS indirizzo FROM Clienti
WHERE PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) > 0