我有一列应该包含电话号码,但它包含用户想要的任何内容。我需要创建一个更新来删除无效字符后的所有字符。
为了做到这一点,我使用了一个正则表达式作为PATINDEX('%[^0-9+-/()" "]%', [MobilNr])
,它似乎一直有效,直到我有一些数字作为+1235, 36446
,令我惊讶的是,结果是0而不是6。此外,如果数字包含.
,则返回0。
PATINDEX
是否忽略句点("."(和逗号(","(?PATINDEX
是否会忽略其他字符?
并不是PATINDEX
忽略了逗号和句点,而是您的模式造成了这个问题。
对于PATINDEX
,连字符字符(-
(有一个特殊的含义——它实际上是一个表示包含范围的运算符——就像0-9
表示0
和9
之间的所有数字一样——所以当你使用+-/
时,它表示+
和/
之间的所有字符(当然包含(。逗号和点字符都在这个范围内,这就是你得到这个结果的原因。
修复模式很容易:使用|
作为逻辑或,或者简单地将连字符移动到模式的末尾:
SELECT PATINDEX('%[^0-9/()" "+-]%', '+1235, 36446') -- Result: 6