eagl69 10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
||||||||
1 |
||||||||
Запрос на поиск по части слова02.03.2020, 09:48. Показов 16680. Ответов 12 Метки нет (Все метки)
Добрый день!
Пробую так но не получается:
1 |
Grossmeister Модератор 4202 / 3042 / 581 Регистрация: 21.01.2011 Сообщений: 13,168 |
||||
02.03.2020, 10:05 |
2 |
|||
Пробую так но не получается Поиск по части слова
А если что не так с кодом на Python – так это в другой форум
1 |
eagl69 10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
||||
02.03.2020, 10:41 [ТС] |
3 |
|||
Да в ветке БД питон пусто
1 |
Jefe 311 / 271 / 118 Регистрация: 05.06.2013 Сообщений: 868 |
||||
03.03.2020, 14:48 |
4 |
|||
Всегда делал так:
Считал это единственным правильным вариантом и только что узнал, что можно делать как-то иначе.
0 |
10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
|
18.03.2020, 12:41 [ТС] |
5 |
Добрый день! В принципе оба способа работают, но столкнулся вот с такой проблемой, ищу по части слова которая выглядит так: “_55_” не воспринимаются нижние подчеркивания как часть слова, например из дух ячеек “Д_77_5511” и “Д_55_0911” должно вывестись только “Д_55_0911”, а показывает все…. В чем может быть причина? И второй вопрос, можно ли отправить еще и имя таблицы? where NAME(где NAME это переменная)
0 |
Модератор 4202 / 3042 / 581 Регистрация: 21.01.2011 Сообщений: 13,168 |
|
18.03.2020, 13:22 |
6 |
В чем может быть причина? Потому что нижнее подчеркивание в LIKE – это шаблонный символ. % означает любой кол. любых символов, а _ – любой один символ.
where NAME(где NAME это переменная) SQL для этого не предназначен. Есть динамический SQL, но как он сочетается с Pytnon (если у тебя вопрос по нему) – это нужно в их форум.
0 |
Jefe 311 / 271 / 118 Регистрация: 05.06.2013 Сообщений: 868 |
||||||||||||
18.03.2020, 14:28 |
7 |
|||||||||||
ищу по части слова которая выглядит так: “_55_” не воспринимаются нижние подчеркивания как часть слова, например из дух ячеек “Д_77_5511” и “Д_55_0911” должно вывестись только “Д_55_0911”, а показывает все… В оракле нижнее подчёркивание экранируется вот так, с указанием экранирующего символа(например ! в моём случае, но можно выбрать другой):
Или можно делать замену заранее:
И второй вопрос, можно ли отправить еще и имя таблицы? where NAME(где NAME это переменная) Можно.
0 |
eagl69 10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
||||
18.03.2020, 15:29 [ТС] |
8 |
|||
Можно. Извиняюсь, ошибся надо передать не имя столбца а имя таблицы
С подчеркиваниями понял, спасибо.
0 |
311 / 271 / 118 Регистрация: 05.06.2013 Сообщений: 868 |
|
18.03.2020, 16:08 |
9 |
from {tabl1} # так можно? Да, можно. Только в 1й строке в кавычки взять название таблицы, строка как никак.
0 |
eagl69 10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
||||
18.03.2020, 18:56 [ТС] |
10 |
|||
Да, можно. Только в 1й строке в кавычки взять название таблицы, строка как никак. Да, спасибо, забыл написать, ну и еще один вопрос, как сделать поиск без учета регистра?
0 |
Jefe 311 / 271 / 118 Регистрация: 05.06.2013 Сообщений: 868 |
||||||||
18.03.2020, 19:34 |
11 |
|||||||
like LOWER(‘%{jobno}%’) Со стороны Оракла lower добавали, это ок.
Добавлено через 3 минуты
1 |
10 / 14 / 8 Регистрация: 12.10.2011 Сообщений: 766 |
|
18.03.2020, 21:58 [ТС] |
12 |
Да, спасибо сработало. но вот во второй базе на SQLite не идет.
0 |
Jefe 311 / 271 / 118 Регистрация: 05.06.2013 Сообщений: 868 |
||||
19.03.2020, 12:21 |
13 |
|||
Сообщение было отмечено eagl69 как решение Решение А с чего бы ему идти и в SQLite?
, где {jobno} это 55
1 |
При работе с базой данных SQL вам может понадобиться найти записи, содержащие определенные строки. В этой статье мы разберем, как искать строки и подстроки в MySQL и SQL Server.
Содержание
- Использование операторов WHERE и LIKE для поиска подстроки
- Поиск подстроки в SQL Server с помощью функции CHARINDEX
- Поиск подстроки в SQL Server с помощью функции PATINDEX
- MySQL-запрос для поиска подстроки с применением функции SUBSTRING_INDEX()
Я буду использовать таблицу products_data
в базе данных products_schema
. Выполнение команды SELECT * FROM products_data
покажет мне все записи в таблице:
Поскольку я также буду показывать поиск подстроки в SQL Server, у меня есть таблица products_data
в базе данных products
:
Поиск подстроки при помощи операторов WHERE и LIKE
Оператор WHERE позволяет получить только те записи, которые удовлетворяют определенному условию. А оператор LIKE позволяет найти определенный шаблон в столбце. Эти два оператора можно комбинировать для поиска строки или подстроки.
Например, объединив WHERE с LIKE, я смог получить все товары, в которых есть слово «computer»:
SELECT * FROM products_data WHERE product_name LIKE '%computer%'
Знаки процента слева и справа от «computer» указывают искать слово «computer» в конце, середине или начале строки.
Если поставить знак процента в начале подстроки, по которой вы ищете, это будет указанием найти такую подстроку, стоящую в конце строки. Например, выполнив следующий запрос, я получил все продукты, которые заканчиваются на «er»:
SELECT * FROM products_data WHERE product_name LIKE '%er'
А если написать знак процента после искомой подстроки, это будет означать, что нужно найти такую подстроку, стоящую в начале строки. Например, я смог получить продукт, начинающийся на «lap», выполнив следующий запрос:
SELECT * FROM products_data WHERE product_name LIKE 'lap%'
Этот метод также отлично работает в SQL Server:
Поиск подстроки в SQL Server с помощью функции CHARINDEX
CHARINDEX() — это функция SQL Server для поиска индекса подстроки в строке.
Функция CHARINDEX() принимает 3 аргумента: подстроку, строку и стартовую позицию для поиска. Синтаксис выглядит следующим образом:
CHARINDEX(substring, string, start_position)
Если функция находит совпадение, она возвращает индекс, по которому найдено совпадение, а если совпадение не найдено, возвращает 0. В отличие от многих других языков, отсчет в SQL начинается с единицы.
Пример:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp') position;
Как видите, слово «free» было найдено на позиции 1. Это потому, что на позиции 1 стоит его первая буква — «f»:
Можно задать поиск с конкретной позиции. Например, если указать в качестве позиции 25, SQL Server найдет совпадение, начиная с текста «freeCodeCamp»:
SELECT CHARINDEX('free', 'free is the watchword of freeCodeCamp', 25);
При помощи CHARINDEX можно найти все продукты, в которых есть слово «computer», выполнив этот запрос:
SELECT * FROM products_data WHERE CHARINDEX('computer', product_name, 0) > 0
Этот запрос диктует следующее: «Начиная с индекса 0 и до тех пор, пока их больше 0, ищи все продукты, названия которых содержат слово «computer», в столбце product_name». Вот результат:
Поиск подстроки в SQL Server с помощью функции PATINDEX
PATINDEX означает «pattern index», т. е. «индекс шаблона». Эта функция позволяет искать подстроку с помощью регулярных выражений.
PATINDEX принимает два аргумента: шаблон и строку. Синтаксис выглядит следующим образом:
PATINDEX(pattern, string)
Если PATINDEX находит совпадение, он возвращает позицию этого совпадения. Если совпадение не найдено, возвращается 0. Вот пример:
SELECT PATINDEX('%ava%', 'JavaScript is a Jack of all trades');
Чтобы применить PATINDEX к таблице, я выполнил следующий запрос:
SELECT product_name, PATINDEX('%ann%', product_name) position FROM products_data
Но он только перечислил все товары и вернул индекс, под которым нашел совпадение:
Как видите, подстрока «ann» нашлась под индексом 3 продукта Scanner. Но скорее всего вы захотите, чтобы выводился только тот товар, в котором было найдено совпадение с шаблоном.
Чтобы обеспечить такое поведение, можно использовать операторы WHERE и LIKE:
SELECT product_name, PATINDEX('%ann%', product_name) position FROM products_data WHERE product_name LIKE '%ann%'
Теперь запрос возвращает то, что нужно.
MySQL-запрос для поиска строки с применением функции SUBSTRING_INDEX()
Помимо решений, которые я уже показал, MySQL имеет встроенную функцию SUBSTRING_INDEX(), с помощью которой можно найти часть строки.
Функция SUBSTRING_INDEX() принимает 3 обязательных аргумента: строку, разделитель и число. Числом обозначается количество вхождений разделителя.
Если вы укажете обязательные аргументы, функция SUBSTRING_INDEX() вернет подстроку до n-го разделителя, где n — указанное число вхождений разделителя. Вот пример:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", 1);
В этом запросе «Learn on freeCodeCamp with me» — это строка, «with» — разделитель, а 1 — количество вхождений разделителя. В этом случае запрос выдаст вам «Learn on freeCodeCamp»:
Количество вхождений разделителя может быть как положительным, так и отрицательным. Если это отрицательное число, то вы получите часть строки после указанного числа разделителей. Вот пример:
SELECT SUBSTRING_INDEX("Learn on freeCodeCamp with me", "with", -1);
От редакции Techrocks: также предлагаем почитать «Индексы и оптимизация MySQL-запросов».
Заключение
Из этой статьи вы узнали, как найти подстроку в строке в SQL, используя MySQL и SQL Server.
CHARINDEX() и PATINDEX() — это функции, с помощью которых можно найти подстроку в строке в SQL Server. Функция PATINDEX() является более мощной, так как позволяет использовать регулярные выражения.
Поскольку в MySQL нет CHARINDEX() и PATINDEX(), в первом примере мы рассмотрели, как найти подстроку в строке с помощью операторов WHERE и LIKE.
Перевод статьи «SQL Where Contains String – Substring Query Example».
<?php include_once('db.php');
$query = ('SELECT * FROM carsekb WHERE car_name = :car ORDER BY car_name ASC');
$stmt = $pdo->prepare($query);
$stmt->execute(['car' => $_POST['carname']]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<table>";
for ($i = 0; $i < count($results); $i++) { ?>
<tr>
<td><?= $results[$i]['car_name']; ?></td>
<td><?= $results[$i]['uberstart']; ?></td>
<td><?= $results[$i]['uberx']; ?></td>
</tr>
<?php }
echo "</table>"; ?>
Использую PDO. В данном примере поиск стоит по равному значению car_name = :car. Есть ли какой-то способ просто искать по части слова, к примеру, набираю volksw и жму поиск – вылазит volkswagen passat, volkawagen jetta и тд все что содержит volksw, и точно также если ищу volkswagen pas – вылезало volkswagen passat?
задан 2 окт 2017 в 6:13
Paul WallPaul Wall
1,7231 золотой знак12 серебряных знаков31 бронзовый знак
0
Поиск нужно делать по LIKE
, а не по =
Что-то вроде такого:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('%value%'));
ответ дан 2 окт 2017 в 6:28
DaemonHKDaemonHK
2,2841 золотой знак15 серебряных знаков29 бронзовых знаков
Для поиска частичного совпадения может быть использована такая конструкция
USE ИМЯ_БД
SELECT * FROM `ТАБЛИЦА`
WHERE ИМЯ_ПОЛЯ LIKE 'ЧТО ИЩЕМ%'
Знак процента обязателен! Он как раз указывает на то что мы ищем только по первой части выражения.
ответ дан 2 окт 2017 в 6:30
Работая с текстом, особенно с большими объемами, зачастую необходимо найти слово или кусок текста. Для этого можно воспользоваться поиском по тексту в Ворде. Существует несколько вариантов поиска в Word:
- Простой поиска, через кнопку «Найти» (открывается панель Навигация);
- Расширенный поиск, через кнопку «Заменить», там есть вкладка «Найти».
Самый простой поиск в ворде – это через кнопку «Найти». Эта кнопка расположена во вкладке «Главная» в самом правом углу.
! Для ускорения работы, для поиска в Ворде воспользуйтесь комбинацией клавишей: CRL+F
После нажатия кнопки или сочетания клавишей откроется окно Навигации, где можно будет вводить слова для поиска.
! Это самый простой и быстрый способ поиска по документу Word.
Для обычного пользователя большего и не нужно. Но если ваша деятельность, вынуждает Вас искать более сложные фрагменты текста (например, нужно найти текст с синим цветом), то необходимо воспользоваться расширенной формой поиска.
Расширенный поиск в Ворде
Часто возникает необходимость поиска слов в Ворде, которое отличается по формату. Например, все слова, выделенные жирным. В этом как рас и поможет расширенный поиск.
Существует 3 варианта вызова расширенного поиска:
- В панели навигация, после обычного поиска
- На кнопке «Найти» нужно нажать на стрелочку вниз
- Нужно нажать на кнопку «Заменить» , там выйдет диалоговое окно. В окне перейти на вкладку «Найти»
В любом случае все 3 варианта ведут к одной форме – «Расширенному поиску».
Как в Word найти слово в тексте – Расширенный поиск
После открытия отдельного диалогового окна, нужно нажать на кнопку «Больше»
После нажатия кнопки диалоговое окно увеличится
Перед нами высветилось большое количество настроек. Рассмотрим самые важные:
Направление поиска
В настройках можно задать Направление поиска. Рекомендовано оставлять пункт «Везде». Так найти слово в тексте будет более реально, потому что поиск пройдет по всему файлу. Еще существуют режимы «Назад» и «Вперед». В этом режиме поиск начинается от курсора и идет вперед по документу или назад (Вверх или вниз)
Поиск с учетом регистра
Поиск с учетом регистра позволяет искать слова с заданным регистром. Например, города пишутся с большой буквы, но журналист где-то мог неосознанно написать название города с маленькой буквы. Что бы облегчить поиск и проверку, необходимо воспользоваться этой конфигурацией:
Поиск по целым словам
Если нажать на вторую галочку, «Только слово целиком», то поиск будет искать не по символам, а по целым словам. Т.е. если вбить в поиск только часть слова, то он его не найдет. Напимер, необходимо найти слово Ворд, при обычном поиске будут найдены все слова с разными окончаниями (Ворде, Ворду), но при нажатой галочке «Только слова целиком» этого не произойдет.
Подстановочные знаки
Более тяжелый элемент, это подстановочные знаки. Например, нам нужно найти все слова, которые начинаются с буквы м и заканчиваются буквой к. Для этого в диалоговом окне поиска нажимаем галочку «Подстановочные знаки», и нажимаем на кнопку «Специальный», в открывающемся списке выбираем нужный знак:
В результате Word найдет вот такое значение:
Поиск омофонов
Microsoft Word реализовал поиск омофонов, но только на английском языке, для этого необходимо выбрать пункт «Произносится как». Вообще, омофоны — это слова, которые произносятся одинаково, но пишутся и имеют значение разное. Для такого поиска необходимо нажать «Произносится как». Например, английское слово cell (клетка) произносится так же, как слово sell (продавать).
! из-за не поддержания русского языка, эффективность от данной опции на нуле
Поиск по тексту без учета знаков препинания
Очень полезная опция «Не учитывать знаки препинания». Она позволяет проводить поиск без учета знаков препинания, особенно хорошо, когда нужно найти словосочетание в тексте.
Поиск слов без учета пробелов
Включенная галочка «Не учитывать пробелы» позволяет находить словосочетания, в которых есть пробел, но алгоритм поиска Word как бы проглатывает его.
Поиск текста по формату
Очень удобный функционал, когда нужно найти текст с определенным форматированием. Для поиска необходимо нажать кнопку Формат, потом у Вас откроется большой выбор форматов:
Для примера в тексте я выделил Жирным текст «как найти слово в тексте Word». Весть текст выделен полужирным, а кусок текста «слово в тексте Word» сделал подчернутым.
В формате я выбрал полужирный, подчеркивание, и русский язык. В итоге Ворд наше только фрагмент «слово в тексте». Только он был и жирным и подчеркнутым и на русском языке.
После проделанных манипуляция не забудьте нажать кнопку «Снять форматирование». Кнопка находится правее от кнопки «Формат».
Специальный поиск от Ворд
Правее от кнопки формат есть кнопка «Специальный». Там существует огромное количество элементов для поиска
Через этот элемент можно искать:
- Только цифры;
- Графические элементы;
- Неразрывные пробелы или дефисы;
- Длинное и короткое тире;
- Разрывы разделов, страниц, строк;
- Пустое пространство (особенно важно при написании курсовых и дипломных работ);
- И много других элементов.
Опции, которые не приносят пользы
!Это мое субъективное мнение, если у вас есть другие взгляды, то можете писать в комментариях.
- Опция «произносится как». Не поддержание русского языка, делает эту опцию бессмысленной;
- Опция «все словоформы», опция полезная при замене. А если нужно только найти словоформы, то с этим справляется обычный поиск по тексту;
- Опция «Учитывать префикс» и «Учитывать суффикс» – поиск слов, с определенными суффиксами и префиксами. Этот пункт так же полезен будет при замене текста, но не при поиске. С этой функцией справляется обычный поиск.
Прочитайте
ru.wikipedia.org/wiki/ВП: Поиск
и расширенная система поиска (в т. ч. можно выбрать через какой поисковик и где искать) : http://ru.wikipedia.org/wiki/Служебная: Search
Есть ещё такое:
http://ru.wikipedia.org/wiki/Служебная: PrefixIndex
Обратите внимание, что в Википедии при введении части слова, появляется ниспадающее меню, которое предлагает варианты.
Если Вы не знаете как пишется “молоко”, то можете ввести “мол” и увидите вариант “молоко”.
Можно воспользоваться системой поиска по категориям:
ru.wikipedia.org/wiki/Википедия: Поиск_по_категориям
Или алфавитным указателем (хотя пользуются им крайне редко) :
ru.wikipedia.org/wiki/Википедия: Алфавитный_указатель
Если Вам нужно произвести какую-то специфическую выборку статей из категорий, то воспользуйтесь инструментом на тулсервере:
http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php
или новой версией http://toolserver.org/~magnus/catscan_rewrite.php (для русского раздела не работает) .
Посмотрите какие ещё инструмены создал этот участник:
http://toolserver.org/~magnus/ (там есть кое-что интересное: поиск своодных изображений, поиск неотпатрулированных статей и тп.)