С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/103: Рейтинг темы: голосов - 103, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 66

Оператор Like в SQL-запрос

05.11.2017, 12:28. Показов 19646. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые знатоки!
Подскажите пожалуйста, как корректно написать оператор Like в запросе?
Мне нужно, чтобы запрос выдавал все возможные варианты того, что я ищу в столбце myField. Для этого я пишу:
T-SQL
1
SELECT * FROM myTable WHERE myField LIKE '*пример*'
Все работает до того момента, как мне нужно найти, например, такие вхождение "41-2", т.е. с дефисом. Такая запись точно имеется в поле, однако, запрос ничего не выдает. Видимо, дефис как-то иначе воспринимается.
Как это можно исправить?
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2017, 12:28
Ответы с готовыми решениями:

SQL запрос (оператор IN)
Прошу помочь, правильно написать код оператора IN (значение содержится) в SQL запросе к БД. Отбираются значения, соответствующие...

SQL - запрос. Ошибка синтаксиса: пропущен оператор
Имеется 2 запроса: FORM2.ADOQuery1.SQL.Add('SELECT * FROM inf WHERE id='+Edit1.Text+';');При вводе id(счетчик) в edit1 выдается вся...

SQL запрос, оператор IN, Delphi и базы данных
В таком запросе Delphi ругается на пропущенный оператор SELECT * FROM `Отправители` WHERE id IN (SLECT ID_salers FROM `Зерновые...

8
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.11.2017, 12:43
Можно реплейсом удалить дефис
SQL
1
SELECT * FROM myTable WHERE REPLACE(myField, "-", "") LIKE '*412*'
Другой вариант искать также с промежуточным символом
SQL
1
SELECT * FROM myTable WHERE myField LIKE '*412*' OR myField LIKE '*41?2*'
Если "пример" берется из формы
SQL
1
SELECT * FROM myTable WHERE REPLACE(myField, "-", "") LIKE '*' & Forms!ИмяФормы!ИмяПоля & '*'
1
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 66
05.11.2017, 13:12  [ТС]
Большое спасибо за ответ!
Вот этот вариант лучшим образом подходит:
T-SQL
1
SELECT * FROM myTable WHERE myField LIKE '*41?2*'
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
05.11.2017, 13:14
Лучший ответ Сообщение было отмечено master-artyom как решение

Решение

Цитата Сообщение от master-artyom Посмотреть сообщение
мне нужно найти, например, такие вхождение "41-2", т.е. с дефисом.
Такая запись точно имеется в поле, однако, запрос ничего не выдает.
Видимо, дефис как-то иначе воспринимается.
Нет, дефис такой же символ, как и прочие.
Он не является для LIKE служебным, как символы ?*#!.
Все нормально распознается:
Visual Basic
1
2
? "123 41-2 9999" LIKE "*41-2*"
True
В запросе тоже - выдает правильно запись таблицы. Проверено.

Ищите другую причину.
Проверьте, например, Asc() символа "-" в поле таблицы.


А ? выдаст записи с любым символом в этом месте. Нужно ли это?
1
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 66
05.11.2017, 16:08  [ТС]
Коллеги, прошу прощения за дезинформацию. Действительно, "-" не относится к специальному символу. Все работает корректно вместе с ним. Не понимаю, почему первые 10 тестов у меня ничего не давали. Вопрос снят. Еще раз прошу прощения.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
05.11.2017, 16:28
master-artyom, потому что в таблице символов есть по меньшей мере 3 разных символа, которые при беглом чтении могут быть все три восприняты как одно и то же. Они отличаются длиной и расположением в строке (строго по центру или немного выше), но визуально перепутать их очень легко, и есть шансы ввести другой вид "черточки" и не заметить: при определенных настройках автозамены дефис, окруженный пробелами с двух сторон, может запросто быть преобразован в тире.

Поэтому совет
Цитата Сообщение от Capi Посмотреть сообщение
Проверьте, например, Asc() символа "-"
очень дельный.

Добавлено через 3 минуты
Для примера: проверьте коды символов в этой строке:

Code
1
─ - ˗ ̵ ̶
1
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,432
05.11.2017, 23:26
Цитата Сообщение от texnik-san Посмотреть сообщение
Для примера: проверьте коды символов в этой строке:
Довольно верное замечание!
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
25.11.2019, 15:31
Всем доброго дня! Сегодня убил уйму времени, пока не нашёл вот такую инфу на просторах сети (решил поделиться):
При выполнении SQL запроса из VBA кода, в месте где пишется условие, при использовании сравнения LIKE нужно использовать символ %, а не * когда требуется сравнивать какую то часть текста, а не точное сравнение. При этом если запустить запрос с * например в Access, то он отработает нормально. Если не знать эту особенность, то ошибку можно долго искать в коде.

Правильно : SELECT * FROM table WHERE pole LIKE «%Условие%»
Неправильно : SELECT * FROM table WHERE pole LIKE «*Условие*»
Нашёл вот тут: http://mekap.ru/where-and-like-vba/#comment-51

У меня собственно была строка:
SQL
1
WHERE  (((Присутствующие) LIKE '*" & Fio & "*')
, которая не работала, пока не заменил * на %.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2019, 15:43
Цитата Сообщение от Rikozenit Посмотреть сообщение
При выполнении SQL запроса из VBA кода, в месте где пишется условие, при использовании сравнения LIKE нужно использовать символ %, а не *
И то и другое верно, но область применения зависит от функционала. Если выполняется в DAO, то нужна звездочка "*", если в ADODB, то процент "%"
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2019, 15:43
Помогаю со студенческими работами здесь

SQL Запрос: 'Ошибка синтаксиса (пропущен оператор)'
Есть на форме OleDataAdapter, есть три таблицы с полями, скажем (field1,f1_id),(field2,f1_id,f2_id),(field3,f2_id) При создании запроса...

Запрос Select T-sql - Вложенный запрос вернул больше одного значения
Нужно посчитать комиссию от сделки. DealShare(комиссия) - поле таблицы agents, supplies - предложения(риелторы клиентам) deals-...

Как посмотреть T-SQL запрос который генерирует Entity Framework запрос
как посмотреть T-SQL запрос который генерирует Entity Framework запрос в visual studio 2010, 2012

Как в sql запрос вставить еще один запрос правильно?
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но выдает он следующее: Запрос: SELECT...

SQL запрос, работающий в MS SQL Menegment'e не работает в делфи
Требуется выполнить запрос по нажатию кнопки, запрос сначала написал в Microsoft SQL Managment, где и написал свою БД, там запрос работает,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru