Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
Здравствуйте,

MS SQL 2005

Нужно найти функцией PATINDEX символ ']'. Т.е. например в следующем примере должно вернуться 9 (номер первого символа "+", которого нету в паттерне ф-ции). Сейчас возвращается 6, потому что наскакивает на "]".

DECLARE @nstring nvarchar(12)
SET @nstring = N'a[b12]ef+)34'
SELECT PATINDEX('%[^A-Z0-9[)]%', @nstring)

Как ']' включить в паттерн?

TIA
20 окт 09, 13:37    [7811338]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
igor_ku
Как ']' включить в паттерн?
Я так понимаю, что никак!

Может быть, извратиться, заменить ']' на какой-нибудь заведомо неиспользуемый символ, например, CHAR(1), и искать его?
Про CHARINDEX я промолчу
20 окт 09, 14:12    [7811642]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5122
SELECT PATINDEX('%[^A-Z0-9[)]%', replace(@nstring,']','['))

--------------------------------------------------------------
Дьявол кроется в деталях.
20 окт 09, 14:12    [7811643]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
Всем спасибо. Так и думал, что нельзя. Вот ещё как вариант придумался:

SELECT 1
FROM (SELECT N'a[b12]ef+)34' AS col1) t
WHERE col1 LIKE '%[^A-Z0-9[)Ё]+]%' ESCAPE 'Ё'
20 окт 09, 14:31    [7811798]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
igor_ku
Нужно найти функцией PATINDEX символ ']'.
...
Сейчас возвращается 6, потому что наскакивает на "]".
Что сказано, то и находится. Символ "]" ведь на 6-й позиции?

igor_ku
Т.е. например в следующем примере должно вернуться 9 (номер первого символа "+", которого нету в паттерне ф-ции).
Нет в паттерне, вот и не находится.

Похоже, что только я один не понял, что нужно сделать :-(
20 окт 09, 14:39    [7811890]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
alexeyvg
Похоже, что только я один не понял, что нужно сделать :-(
20 окт 09, 14:44    [7811931]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
alexeyvg
Похоже, что только я один не понял, что нужно сделать :-(


Ключевой вопрос был такой:

igor_ku
Как ']' включить в паттерн?
20 окт 09, 14:45    [7811945]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
igor_ku
Всем спасибо. Так и думал, что нельзя. Вот ещё как вариант придумался:

SELECT 1
FROM (SELECT N'a[b12]ef+)34' AS col1) t
WHERE col1 LIKE '%[^A-Z0-9[)Ё]+]%' ESCAPE 'Ё'
Минуточку!
А где в стартовом посте LIKE???
Или кто-то открыл способ применить ESCAPE в PATINDEX?
Где в последнем Вашем SELECTе определяется позиция символа ']' в строке?

Так нечестно, однако!
20 окт 09, 14:46    [7811953]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
iap
Так нечестно, однако!

Да, произошло небольшое отступление от первоначально поставленного вопроса. Т.е. позиция перестала быть нужной - лишь наличие\отсутствие символа. Извините за "нечестность", но пока думал, решил, что LIKE будет достаточно.
20 окт 09, 14:50    [7811987]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
так?
'%[^A-Z0-9][)]%'
20 окт 09, 14:54    [7812020]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
igor_ku
Ключевой вопрос был такой:

igor_ku
Как ']' включить в паттерн?
А, понятно - немного запутался.

Если можно обойтись LIKE, то, конечно, правильно использовать ESCAPE
20 окт 09, 15:02    [7812113]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
igor_ku
Member

Откуда:
Сообщений: 129
Зайцев Фёдор
так?
'%[^A-Z0-9][)]%'


Нет, это что-то не то. Ставим "+" на второе место в примере выше и совсем не получаем 2.
20 окт 09, 15:07    [7812167]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и правый из brackets  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Зайцев Фёдор
так?
'%[^A-Z0-9][)]%'
Этот шаблон требует наличия в строке как минимум двух символов:
"не буква и не цифра" с последующей закрывающей круглой скобкой ")".
По-моему, вообще не в тему...
20 окт 09, 15:10    [7812205]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: PATINDEX и правый из brackets  [new]
IgorAk
Guest
http://msdn.microsoft.com/ru-ru/library/ms179859.aspx
14 ноя 11, 18:00    [11595330]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить