T-SQL PATINDEX -1
T-SQL PATINDEX -1
这是我第一次 post 在这里,我也是开发中的新手。
无论如何..我的问题是:
sql 语句:
SELECT left(clienti.SedeLegaleIndirizzo, patindex('%[0-9]%',clienti.SedeLegaleIndirizzo))
AS indirizzo from Clienti
clienti.SedeLegaleIndirizzo
是clienti
table,SedeLegaleIndirizzo
是地址包括streen和number的列。
我想将街道与数字分开,但根据我的陈述,我得到了第一个数字的街道。正如我从 charindex 知道的那样,我可以将 -1 添加到最后一个参数,但问题是 returns 如果我将该参数与 patindex:
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
我正在使用 patindex 而不是 charindex 因为我正在搜索一个数字...
有什么建议吗?
我不太清楚你把 -1
放在哪里,但看起来你是这样做的:
SELECT left(clienti.SedeLegaleIndirizzo,
patindex('%[0-9]%', clienti.SedeLegaleIndirizzo)-1)
这会在找不到数字时出现问题,因为 patindex()
会给出 0
和 0-1=-1
。您不能有长度为 -1
的 left()
。我在这些情况下的解决方案是:
SELECT left(SedeLegaleIndirizzo,
isnull(nullif(patindex('%[0-9]%', SedeLegaleIndirizzo)-1, -1), 0))
这确保如果找不到数字,而不是尝试执行 left(SedeLegaleIndirizzo, -1)
代码将导致 left(SedeLegaleIndirizzo, 0)
并简单地给出一个空字符串。
您收到错误的原因很可能是由于行中没有数字,这会使 patindex(...) -1
的结果为负数。
一种解决方案是排除这些行:
SELECT LEFT(clienti.SedeLegaleIndirizzo, PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) - 1)
AS indirizzo FROM Clienti
WHERE PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) > 0
这是我第一次 post 在这里,我也是开发中的新手。 无论如何..我的问题是:
sql 语句:
SELECT left(clienti.SedeLegaleIndirizzo, patindex('%[0-9]%',clienti.SedeLegaleIndirizzo))
AS indirizzo from Clienti
clienti.SedeLegaleIndirizzo
是clienti
table,SedeLegaleIndirizzo
是地址包括streen和number的列。
我想将街道与数字分开,但根据我的陈述,我得到了第一个数字的街道。正如我从 charindex 知道的那样,我可以将 -1 添加到最后一个参数,但问题是 returns 如果我将该参数与 patindex:
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
我正在使用 patindex 而不是 charindex 因为我正在搜索一个数字...
有什么建议吗?
我不太清楚你把 -1
放在哪里,但看起来你是这样做的:
SELECT left(clienti.SedeLegaleIndirizzo,
patindex('%[0-9]%', clienti.SedeLegaleIndirizzo)-1)
这会在找不到数字时出现问题,因为 patindex()
会给出 0
和 0-1=-1
。您不能有长度为 -1
的 left()
。我在这些情况下的解决方案是:
SELECT left(SedeLegaleIndirizzo,
isnull(nullif(patindex('%[0-9]%', SedeLegaleIndirizzo)-1, -1), 0))
这确保如果找不到数字,而不是尝试执行 left(SedeLegaleIndirizzo, -1)
代码将导致 left(SedeLegaleIndirizzo, 0)
并简单地给出一个空字符串。
您收到错误的原因很可能是由于行中没有数字,这会使 patindex(...) -1
的结果为负数。
一种解决方案是排除这些行:
SELECT LEFT(clienti.SedeLegaleIndirizzo, PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) - 1)
AS indirizzo FROM Clienti
WHERE PATINDEX('%[0-9]%',clienti.SedeLegaleIndirizzo) > 0