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

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

05.11.2017, 12:28. Показов 19131. Ответов 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
26823 / 14503 / 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
3680 / 2240 / 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
11122 / 5743 / 1468
Регистрация: 05.10.2016
Сообщений: 16,219
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
26823 / 14503 / 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
Ответ Создать тему
Новые блоги и статьи
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru