这是我在这里的第一篇文章,我也是一个开发新手。无论如何..我的问题是:
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 而不是字符索引,因为我正在搜索一个数字......
有人有什么建议?
我不完全清楚你把-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