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
我有一列应该包含 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