PATINDEX 不识别点和逗号

PATINDEX does not recognize dot and comma

我有一列应该包含 phone 个数字,但它包含了用户想要的任何内容。我需要创建更新以删除无效字符后的所有字符。

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

PATINDEX 会忽略点 (".") 和逗号 (",") 吗?还有 PATINDEX 会忽略的其他字符吗?

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

对于PATINDEX,连字符字符(-)有特殊含义——它实际上是一个表示包含范围的运算符——像0-9表示[=之间的所有数字15=] 和 9 - 所以当你做 +-/ 时,它意味着 +/ 之间的所有字符(当然包括在内)。逗号和点字符在此范围内,这就是您得到此结果的原因。

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

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