T-SQL PATINDEX -1



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

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()就会给出00-1=-1。你不能有一个长度-1left().在这些情况下,我的解决方案是这样的:

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

相关内容

  • 没有找到相关文章

最新更新