Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql PATINDEX无法识别点和逗号_Tsql_Patindex - Fatal编程技术网

Tsql PATINDEX无法识别点和逗号

Tsql PATINDEX无法识别点和逗号,tsql,patindex,Tsql,Patindex,我有一个列,应该包含电话号码,但它包含任何用户想要的。我需要创建一个更新来删除无效字符后的所有字符 为此,我使用了一个正则表达式作为PATINDEX(“%[^0-9+-/()”“]%”,[MobilNr]),直到我得到了一些数字作为+123536446,结果竟然是0而不是6。如果数字包含,则返回0 PATINDEX是否忽略点(“.”)和逗号(“,”?是否有其他字符将被PATINDEX忽略?不是PATINDEX忽略逗号和点,而是您的模式造成了这个问题 对于PATINDEX,连字符(-)有一个特殊的

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

为此,我使用了一个正则表达式作为
PATINDEX(“%[^0-9+-/()”“]%”,[MobilNr])
,直到我得到了一些数字作为
+123536446
,结果竟然是0而不是6。如果数字包含
,则返回0


PATINDEX
是否忽略点(“.”)和逗号(“,”?是否有其他字符将被
PATINDEX
忽略?

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

对于
PATINDEX
,连字符(
-
)有一个特殊的含义-它实际上是一个表示包含范围的运算符-例如
0-9
表示
0
9
之间的所有数字-因此当您执行
+-/
时,它表示
+
//code>之间的所有字符(当然包括在内)。逗号和点字符都在这个范围内,这就是为什么会得到这个结果

修复模式很容易:使用
|
作为逻辑or,或者简单地将连字符移动到模式的末尾:

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

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

对于
PATINDEX
,连字符(
-
)有一个特殊的含义-它实际上是一个表示包含范围的运算符-例如
0-9
表示
0
9
之间的所有数字-因此当您执行
+-/
时,它表示
+
//code>之间的所有字符(当然包括在内)。逗号和点字符都在这个范围内,这就是为什么会得到这个结果

修复模式很容易:使用
|
作为逻辑or,或者简单地将连字符移动到模式的末尾:

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

我不太清楚你在问什么。如果你能把你的问题包括在样本数据中(作为DDL+DML!),你当前的陈述和预期的结果都会很好。为什么DDL和DML会有关系呢?试着选择PATINDEX(“%[^0-9+-/()”“]%”,“+1235,36446”),结果是0而不是6,6是“,”。因此,我不理解PATINDEX或Regex忽略了点和逗号。我真的不确定您在这里要问什么。如果您能将您的问题包括示例数据(作为DDL+DML!),那么您当前的语句和预期结果将非常好。DDL和DML为什么重要?请尝试选择PATINDEX(“%[^0-9+-/()”]%,“+123536446”)结果是0而不是6,6是“,”的索引。由此我可以理解,PATINDEX或Regex忽略了点和逗号