1

这是我在这里的第一篇文章,我也是开发中的新手。无论如何..我的问题是:

sql语句:

SELECT left(clienti.SedeLegaleIndirizzo, patindex('%[0-9]%',clienti.SedeLegaleIndirizzo))
AS indirizzo from Clienti

clienti.SedeLegaleIndirizzoclienti表,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 因为我正在搜索一个数字......

有人有什么建议吗?

4

2 回答 2

1

我并不完全清楚您将其放置在哪里,-1但看起来您正在这样做:

SELECT left(clienti.SedeLegaleIndirizzo,
        patindex('%[0-9]%', clienti.SedeLegaleIndirizzo)-1)

这将在找不到数字时出现问题,因为 thenpatindex()给出0and 0-1=-1。你不能有一个left()with length -1。在这些情况下,我的解决方案是:

SELECT left(SedeLegaleIndirizzo,
        isnull(nullif(patindex('%[0-9]%', SedeLegaleIndirizzo)-1, -1), 0))

这确保了如果找不到数字,而不是尝试执行left(SedeLegaleIndirizzo, -1)代码,将导致left(SedeLegaleIndirizzo, 0)并简单地给出一个空字符串。

于 2015-01-26T09:39:45.643 回答
0

您收到错误的原因很可能是由于没有数字的行导致结果为patindex(...) -1负。

一种解决方案是排除这些行:

SELECT LEFT(clienti.SedeLegaleIndirizzo, PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) - 1) 
AS indirizzo FROM Clienti
WHERE PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) > 0
于 2015-01-26T09:40:30.967 回答