SQL 使用多个可选字段过滤器的关键字搜索(元数据库)

SQL Keyword Search using multiple optional field filters (Metabase)

我是 SQL(自学)和 Whosebug 的新手。所以,如果有一点新话,我深表歉意。

目前我正在尝试在 Metabase 中编写一个查询,允许用户在特定日期期间搜索多个字段,而不是 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 解决方案,但没有任何运气。

这里有人能帮帮我吗?任何帮助将不胜感激。

您只需要 [[AND b.StringA = Like ({{StringA}}+'%']] 即可找到所有以 STRING A

开头的值

或使用 LIKE [[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]] 在任何位置查找这些值。 [你的例子]

此外,我建议在检查可选数据时使用 OR,并且在返回任何内容之前要求全部为真

所以我实际上在经过一些反复试验后弄清楚了这个问题,并想回来更新线程以防其他人遇到同样的问题。

而不是

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

它需要看起来像

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

一个小语法错误,但老兄,这让我有点难过。

无论如何,我感谢人们试图提供的所有帮助,并希望这对将来的人有所帮助。