Поиск по ключевому слову SQL с использованием нескольких необязательных фильтров полей (метабаза)

Я новичок в SQL(Self Taught) и в Stackru. Поэтому я прошу прощения, если есть немного новичка.

В настоящее время я пытаюсь написать запрос в метабазе, который позволяет пользователю выполнять поиск по нескольким полям в течение определенного периода времени, не будучи на 100% точным по отношению к тому, что они ищут, что-то вроде поиска по ключевым словам.

Search requests:
Date Time...(Required)
User...(optional)
String A...(optional)
String B...(optional)
String C...(optional)

SELECT 
a.DateTime,
a.User,
b.StringA,
b.StringB,
b.StringC

FROM TableA a

JOIN tableB b
   ON TableAid = TableBid

WHERE a.datetime between {{start}} and {{end}}
[[AND a.User = {{user}}]]
[[AND b.StringA = {{StringA}}]]
[[AND b.StringB = {{StringB}}]]
[[AND b.StringC = {{StringC}}]];

Синтаксис выше, кажется, работает правильно, но только если они имеют полные слова, введенные в соответствующие поля. Я пытаюсь использовать оператор Like для извлечения всех строк в столбцах A B и C, которые имеют строку, аналогичную приведенной.

Я пытался с помощью

[[AND b.StringA = Like ('%'+{{StringA}}+'%')]]

а также

[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]

безрезультатно и попытался использовать несколько решений @StringA в некоторых темах, но безуспешно.

Кто-нибудь может помочь мне здесь? Любая помощь будет принята с благодарностью.

2 ответа

Решение

Так что я на самом деле выяснил это после небольшой проб и ошибок и хотел вернуться и обновить ветку на случай, если у кого-то еще возникнет такая же проблема.

Скорее, чем

[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]

это должно выглядеть

[[and b.StringA like (concat('%',{{StringA}},'%'))]]

Небольшая синтаксическая ошибка, но человек это меня немного озадачил.

В любом случае, я ценю всю помощь, которую пытались оказать люди, и надеюсь, что это поможет кому-то в будущем.

Вам нужно только [[AND b.StringA = Like ({{StringA}}+'%']] найти все значения, которые начинаются с STRING A

или используйте как [[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]] найти эти значения в любой позиции. [ваш пример]

Кроме того, я бы предложил использовать ИЛИ при проверке дополнительных данных, И требует, чтобы все было верно, прежде чем возвращать что-либо

Другие вопросы по тегам