PATINDEX无法识别点和逗号



我有一列应该包含电话号码,但它包含用户想要的任何内容。我需要创建一个更新来删除无效字符后的所有字符。

为了做到这一点,我使用了一个正则表达式作为PATINDEX('%[^0-9+-/()" "]%', [MobilNr]),它似乎一直有效,直到我有一些数字作为+1235, 36446,令我惊讶的是,结果是0而不是6。此外,如果数字包含.,则返回0。

PATINDEX是否忽略句点("."(和逗号(","(?PATINDEX是否会忽略其他字符?

并不是PATINDEX忽略了逗号和句点,而是您的模式造成了这个问题。

对于PATINDEX,连字符字符(-(有一个特殊的含义——它实际上是一个表示包含范围的运算符——就像0-9表示09之间的所有数字一样——所以当你使用+-/时,它表示+/之间的所有字符(当然包含(。逗号和点字符都在这个范围内,这就是你得到这个结果的原因。

修复模式很容易:使用|作为逻辑或,或者简单地将连字符移动到模式的末尾:

SELECT PATINDEX('%[^0-9/()" "+-]%', '+1235, 36446') -- Result: 6

相关内容

  • 没有找到相关文章

最新更新