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

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

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

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

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

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

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

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

8
Эксперт MS Access
26812 / 14491 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.11.2017, 12:43 2
Можно реплейсом удалить дефис
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  [ТС] 3
Большое спасибо за ответ!
Вот этот вариант лучшим образом подходит:
T-SQL
1
SELECT * FROM myTable WHERE myField LIKE '*41?2*'
0
Модератор
Эксперт MS Access
6219 / 2898 / 703
Регистрация: 12.06.2016
Сообщений: 7,801
05.11.2017, 13:14 4
Лучший ответ Сообщение было отмечено 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  [ТС] 5
Коллеги, прошу прощения за дезинформацию. Действительно, "-" не относится к специальному символу. Все работает корректно вместе с ним. Не понимаю, почему первые 10 тестов у меня ничего не давали. Вопрос снят. Еще раз прошу прощения.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
05.11.2017, 16:28 6
master-artyom, потому что в таблице символов есть по меньшей мере 3 разных символа, которые при беглом чтении могут быть все три восприняты как одно и то же. Они отличаются длиной и расположением в строке (строго по центру или немного выше), но визуально перепутать их очень легко, и есть шансы ввести другой вид "черточки" и не заметить: при определенных настройках автозамены дефис, окруженный пробелами с двух сторон, может запросто быть преобразован в тире.

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

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

Код
─ - ˗ ̵ ̶
1
Заблокирован
05.11.2017, 23:26 7
Цитата Сообщение от texnik-san Посмотреть сообщение
Для примера: проверьте коды символов в этой строке:
Довольно верное замечание!
0
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
25.11.2019, 15:31 8
Всем доброго дня! Сегодня убил уйму времени, пока не нашёл вот такую инфу на просторах сети (решил поделиться):
При выполнении 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
26812 / 14491 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2019, 15:43 9
Цитата Сообщение от Rikozenit Посмотреть сообщение
При выполнении SQL запроса из VBA кода, в месте где пишется условие, при использовании сравнения LIKE нужно использовать символ %, а не *
И то и другое верно, но область применения зависит от функционала. Если выполняется в DAO, то нужна звездочка "*", если в ADODB, то процент "%"
3
25.11.2019, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2019, 15:43
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru