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

Откуда: Moscow
Сообщений: 1698
Доброго времени суток.


Есть строка вида '^^^text^^^^^'

Необходимо найти индекс первого символа отличного от "^"

Если бы источником поиска был символ отличный от "^" можно было бы написать так:
DECLARE
       @text VARCHAR(255),
       @srchchar VARCHAR(255)

SET @text ='ffffTHIS_IS_TEXTff'
SET @srchchar = 'f'

SELECT PATINDEX('%[^' + @srchchar + ']%', @text)


Но такая конструкция с символом шаблона уже не прокатывает:
DECLARE
       @text VARCHAR(255),
       @srchchar VARCHAR(255)

SET @text ='^^^THIS_IS_TEXT^^'
SET @srchchar = '^'

SELECT PATINDEX('%[^' + @srchchar + ']%', @text)


Есть конечно вариант:
DECLARE
       @text VARCHAR(255),
       @srchchar VARCHAR(255)

SET @text ='^^^THIS_IS_TEXT'
SET @srchchar = '^'

SELECT DATALENGTH(@text) - DATALENGTH(REPLACE(@text, '^', '')) + 1
но он мне конструктивно не нравиться.

Если кто знает есть ли возможность использовать функции charindex или patindex с использованием escape директивы?
6 окт 14, 16:02    [16666910]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
add: и загонять в цикл тоже не особо хочется
6 окт 14, 16:03    [16666913]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
replace + patindex
6 окт 14, 16:28    [16667050]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
aleks2
Guest
select PATINDEX('%[^ ^]%', '^^^^^THIS_IS_TEXTff')



-----------
6

(1 row(s) affected)
6 окт 14, 18:10    [16667692]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
Более корректно:
select PATINDEX('%[^^-^]%', '^^^^^ THIS_IS_TEXTff')
6 окт 14, 18:27    [16667761]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
aleks2
select PATINDEX('%[^ ^]%', '^^^^^THIS_IS_TEXTff')



-----------
6

(1 row(s) affected)


только уточнить, что так он заодно и пробелы будет пропускать.
select PATINDEX('%[^ ^]%', '^^ ^^^THIS_IS_TEXTff')
6 окт 14, 18:28    [16667771]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
Был неправ.
6 окт 14, 18:29    [16667775]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
Вот так можно извратиться
select patindex('%[^' + char(0) + '^]%', '^^^^^THIS_IS_TEXTff');
6 окт 14, 20:50    [16668191]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
invm
Вот так можно извратиться
select patindex('%[^' + char(0) + '^]%', '^^^^^THIS_IS_TEXTff');
Для многих COLLATION CHAR(0) обрабатывается не так, как надо. Поэтому тогда уж CHAR(1)
6 окт 14, 20:57    [16668213]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
да, как то не подумал про replace

SELECT PATINDEX('%[^'+CHAR(0)+']%', REPLACE('^^^^^   THIS_IS_TEXTff', '^', CHAR(0)))
6 окт 14, 21:11    [16668246]     Ответить | Цитировать Сообщить модератору
 Re: функция patindex и символ шаблона несовпадения  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
:D пока писал предложили вариант который как раз сам решил использовать
6 окт 14, 21:12    [16668254]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить