CHARINDEX всегда возвращает 0 при поиске пробела в столбце TEXT - PullRequest
5 голосов
/ 22 февраля 2012
--get text target starting integers into a table

declare @target TABLE([USERID] varchar(25),[target] int)

--get text stopping point integers into a table

declare @stop TABLE([USERID] varchar(25),[target] int, [stop] int)

--get just the options I want into a table

declare @options TABLE ([USERID] varchar(25), [userDetails] text)
insert into @options ([userid], [userDetails])
select u.userid, rtrim(ltrim(SUBSTRING([userDetails], s.[target], s.[stop] - s.[target])))
from users u join @stop s on u.userid = s.userid

declare @userDetails varchar(max)
Select top 1
@userDetails = [userDetails]
from @options
select charindex(char(32), @userDetails)

Все, что я когда-либо получаю, это 0 из этого хариндекса, я пробовал '' вместо char (32). Я пытался изменить текст на varchar, но насколько я вижу, это бессмысленно, поскольку текст становится устаревшим и уже рассматривается как varchar?

Когда я копирую и вставляю кусок userDetails в одну строку в кавычках и помещаю его в функцию charindex, все работает как положено.

Исходный текст, который заполняет @userDetails, выглядит следующим образом:

ключ = значение ключ = значение ключ = значение

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Переключитесь на «Результаты в текст» в SSMS, чтобы увидеть, что действительно выводится.Если вы находитесь в «Результатах в сетке», CRLF преобразуются в пробелы.

Как упомянуто в комментариях @PhilipKelley,

перемещение между столбцами преобразуется в символы [tab]...

Теперь поиск символа (13) или возврата каретки позволяет мне найти символ, который находится между каждой из моих пар ключ = значение.Это также объясняет, почему есть 2 пробела, это CRLF, который программа, которая записывала эти данные, использует для разбиения каждой записи

@ Dems, напомнила мне, что

«Пробел» охватывает вкладки, возврат каретки и целый ряд других объектов,

Также аналогичная тема обсуждалась на этом сайте в другом обсуждении

0 голосов
/ 22 марта 2017

userDetailsIndex = patindex ('%%', userDetails)

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