首页 > 解决方案 > PATINDEX 无法识别点和逗号

问题描述

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

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

是否PATINDEX忽略点(“。”)和逗号(“,”)?还有其他角色PATINDEX会忽略吗?

标签: tsqlpatindex

解决方案


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

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

修复模式很容易:或者|用作逻辑或,或者只是将连字符移动到模式的末尾:

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

推荐阅读