Консультация № 187159
12.02.2013, 07:17
127.04 руб.
0 16 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

База данных в MSSQL 2008R2. В таблице есть текстовое поле (тип ntext), к которому я хочу применить условие LIKE. В столбце русский текст. В строке поле должно начинаться с букв ЭЧБ. Пишу такой запрос:
Код:
SELECT [поле] FROM dbo.Таблица WHERE [поле] LIKE 'ЭЧБ%'

В результате не возвращается ни одна строка, хотя строки, начинающиеся с ЭЧБ есть, это совершенно точно.
Что нужно сделать, чтобы запрос возвратил корректный результат?

Обсуждение

Неизвестный
12.02.2013, 07:27
общий
Адресаты:
Попробуйте вот так, если получится, оформлю в ответ (сейчас нет возможности протестировать самому):
Код:
SELECT [поле] FROM dbo.Таблица WHERE CAST([поле] AS nvarchar(4000)) LIKE 'ЭЧБ%'
давно
Мастер-Эксперт
425
4118
12.02.2013, 07:51
общий
Так тоже пробовал, никаких результатов.
Проблема, мне думается, именно в руских буквах. Можно ли как-нибудь в запросе указать, что у меня именно русские буквы?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
12.02.2013, 07:52
общий
А текст Вашего запроса от моего чем принципиально отличается?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
12.02.2013, 07:58
общий
Адресаты:
Есть ли возможность показать результат запроса:
Код:
SELECT top 5 CAST([поле] AS nvarchar(4000)) FROM dbo.Таблица
Неизвестный
12.02.2013, 08:09
общий
Цитата: Вадим Исаев ака sir Henry
Я проверил именно такой запрос (именно с указанием базы данных) и с таким же полем, на своей базе, у меня этот запрос работает на ура. попробуйте сделать хранимую процедуру в sql servere 2008r2.
вы непосредственно в sql server делаете запрос?
давно
Мастер-Эксперт
425
4118
12.02.2013, 08:27
общий
12.02.2013, 08:28
Цитата: 351298
Есть ли возможность показать результат запроса:

Выдаёт ровно пять первых строчек.
Прикрепленные файлы:
938ff419276ac1ca00d5682f53de1dd4.png
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
12.02.2013, 08:29
общий
Цитата: 136789
вы непосредственно в sql server делаете запрос?

В Microsoft SQL Server Management Studio.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
12.02.2013, 08:40
общий
Цитата: 351298
[/q] при выполнении этого запроса и будет получатся [q=425]
потому что запрашивается непосредственно 5 записей (top 5) теперь к этому [q=351298][/q] добавьте WHERE [поле] LIKE 'О%' и попробуйте, по логике из пяти записей которые у вас отобразились должно получится только "Открытие вкладки...."
Неизвестный
12.02.2013, 08:45
общий
Адресаты:
Вы говорите, что в списке точно есть записи, начинающиеся на ЭЧБ.
Могли бы Вы привести пример такой записи, включая все символы поля. Возможно впереди присутствуют пробелы?
давно
Мастер-Эксперт
425
4118
12.02.2013, 09:02
общий
12.02.2013, 09:05
Цитата: 351298
Могли бы Вы привести пример такой записи, включая все символы поля.

Все символы поля не могу - нарушение закона о персональных данных.
Вот, что получается. Как видите, ЭЧБ в начале точно есть.
... LIKE '%ЭЧБ%' тоже не приносит никаких результатов.
Прикрепленные файлы:
d5a32d639d9330763215c546fbfd4513.png
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
12.02.2013, 09:15
общий
Адресаты:
Вот так пробуйте:

Код:
SELECT [поле] FROM dbo.Таблица WHERE [поле] LIKE N'ЭЧБ%'
Неизвестный
12.02.2013, 09:24
общий
https://rfpro.ru/upload/9160 - скрин выполнения запроса
https://rfpro.ru/upload/9160 - скрин таблицы с данными
https://rfpro.ru/upload/9162 - структура таблицы
создал специально таблицу занес туда данные, и сделал выборку, все работает.
посмотрите скрины и попробуйте найти ошибку у себя.
давно
Мастер-Эксперт
425
4118
12.02.2013, 09:27
общий
Вы гений!!!!
С приставкой N заработало.
Теперь расскажите, что эта буква обозначает, а то я в MSSQL не силён.
Можно оформлять ответ.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
12.02.2013, 09:30
общий
это ответ
Здравствуйте, Вадим Исаев ака sir Henry!

Текстовое поле типа NTEXT содержит в себе по два байта на каждый символ.
Для сравнения данного типа поля с произвольной строкой, необходимо преобразовать строку 'ЭЧБ' в двухбайтовый вариант с помощью приставки N'ЭЧБ':

Код:
SELECT [поле] FROM dbo.Таблица WHERE [поле] LIKE N'ЭЧБ%'
5
Большое спасибо!
давно
Мастер-Эксперт
425
4118
12.02.2013, 09:33
общий
Ок.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Руководитель
2
547
12.02.2013, 14:48
общий
Адресаты:
Оценка не влияет на перечисление выплаты за ответ. Т.е. 5 или 1 - деньги всё равно поступят эксперту...
Форма ответа