tsql - PATINDEX 无法识别点和逗号
问题描述
我有一列应该包含电话号码,但它包含用户想要的任何内容。我需要创建更新以删除无效字符后的所有字符。
为此,我使用了一个正则表达式 as PATINDEX('%[^0-9+-/()" "]%', [MobilNr])
,它似乎可以工作,直到我有一些数字 as +1235, 36446
,令我惊讶的是,结果是 0 而不是 6。此外,如果数字包含.
它返回 0。
是否PATINDEX
忽略点(“。”)和逗号(“,”)?还有其他角色PATINDEX
会忽略吗?
解决方案
这不是PATINDEX
忽略逗号和点,而是您的模式造成了这个问题。
对于PATINDEX
,连字符 ( -
) 具有特殊含义 - 它实际上是一个表示包含范围的运算符 - 就像表示和0-9
之间的所有数字一样- 所以当你这样做时,它意味着和之间的所有字符(当然包括在内)。逗号和点字符在这个范围内,这就是你得到这个结果的原因。0
9
+-/
+
/
修复模式很容易:或者|
用作逻辑或,或者只是将连字符移动到模式的末尾:
SELECT PATINDEX('%[^0-9/()" "+-]%', '+1235, 36446') -- Result: 6
推荐阅读
- django - 'str' 对象没有属性 '_meta' 没有密码的 django 登录设置
- c# - .net 核心工作者服务如何 DI 样板库?
- c# - 本地访问 samba 共享 raspberry 和 dotnet 5
- typescript - 如何将缓冲区请求正文与 Mock Service Worker 匹配
- c - 用于 GTK 开发的 VS Code C/C++ 配置
- reactjs - React - 在布局和子页面中包含 JS 文件的问题
- d3.js - D3.CSV ReferenceError:未定义提取
- python - 整个块的 dask.array 缓存
- sql - 基于组 SQL Netezza 过滤数据
- ubuntu - 在图表中显示字符时出现 Highcharts 错误字体