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