PATINDEX не распознает точку и запятую - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть столбец, который должен содержать номера телефонов, но он содержит все, что хотел пользователь. Мне нужно создать обновление, чтобы удалить все символы после недопустимого символа.

Для этого я использую регулярное выражение в качестве PATINDEX('%[^0-9+-/()" "]%', [MobilNr]), и оно работало, пока у меня не появилось несколько чисел, таких как +1235, 36446, и доК моему удивлению, результат равен 0 вместо 6. Также, если число содержит ., оно возвращает 0.

Не игнорирует ли PATINDEX точку (".") и запятую (",")? Есть ли другие символы, которые PATINDEX будет игнорировать?

1 Ответ

2 голосов
/ 07 ноября 2019

Дело не в том, что PATINDEX игнорирует запятую и точку, это ваша модель, которая создала эту проблему.

При PATINDEX символ дефиса (-) имеет особое значение - он вФактически оператор, который обозначает включающий диапазон - например, 0-9 обозначает все цифры между 0 и 9 - поэтому, когда вы делаете +-/, это означает, что все символы между + и / (включительно, конечно,). Запятые и точечные символы находятся в этом диапазоне, поэтому вы получаете этот результат.

Исправить шаблон легко: либо используйте | в качестве логического, либо просто переместите дефис в конец шаблона:

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