Есть ли способ получить N-й индекс указанного символа в T-SQL?(Без подстроки!) - PullRequest
1 голос
/ 06 августа 2010

Я пытаюсь получить индекс N-го символа внутри varchar (MAX). Прямо сейчас я отсекаю передний конец varchar, поэтому мне нужно проверить только первый, но с очень большими varchars процесс становится слишком медленным. Я хотел бы проанализировать varchar (max) и просто отслеживать, какой у меня индекс, и получить следующий символ, который я хочу ПОСЛЕ этого индекса. Если бы я мог сделать это без необходимости постоянно отрезать переднюю часть большого varchar, я думаю, что это значительно увеличило бы производительность. Спасибо.

EDIT: Прямо сейчас, чтобы проанализировать большой объем текста, я использую CHARINDEX, чтобы получить индекс символа, ТОГДА Я ПОДПИСЫВАЮ текст, чтобы удалить до этого первого индекса. Теперь я снова вызываю CHARINDEX (который эффективно получает 2-й индекс этого символа внутри текста). Тем не менее, это SUBSTRINGING очень обременительно для системы, и я хочу избежать этого.

РЕДАКТИРОВАТЬ: Ах, извините, мой заголовок был очень вводящим в заблуждение, теперь он должен быть более прямым.

Ответы [ 3 ]

3 голосов
/ 06 августа 2010

Встроенные строковые функции довольно ограничены в T-SQL.Вам нужно объединить SUBSTRING (), CHARINDEX (), STRPOS () для этого, но это не быстрые операции.

Также вы можете использовать таблицу подсчета.

Но я думаю, что лучшеспособ заключается в использовании процедуры CLR для такой задачи, как ваша.Это будет более эффективно и быстро.

1 голос
/ 06 августа 2010

Одним из способов повышения производительности при выполнении процедурной работы (в отличие от на основе набора работы) является использование CLR Integration с SQL Server . Я получил этот совет от Криса Лайвли в этом ответе , когда задавал вопрос о производительности. Хотя я сам не проверял это, документация об интеграции CLR с SQL-сервером предполагает, что CLR гораздо более производительный, чем T-SQL для процедурных операций. Однако для операций на основе множеств используйте T-SQL.

0 голосов
/ 06 августа 2010

Я думаю, что функции CHARINDEX или SUBSTRING решат вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...