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

时间:2018-09-27 23:59:39

标签: sql filter mariadb field metabase

我是SQL(自学)和StackOverflow的新手。因此,如果您要说些新话,我深表歉意。

当前,我正在尝试在Metabase中编写一个查询,该查询使用户可以在特定日期范围内搜索多个字段,而不完全符合他们要搜索的内容,就像关键字搜索一样。

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 个答案:

答案 0 :(得分:0)

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

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

另外,我建议在检查可选数据时使用OR,并且在返回任何内容之前要求所有条件都为真

答案 1 :(得分:0)

因此,我实际上是经过一番尝试和错误后才弄清楚这一点,并想回来并更新线程,以防其他人遇到相同的问题。

而不是

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

它看起来应该像

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

一个轻微的语法错误,但这使我难过了。

无论如何,我都很感谢人们试图提供的所有帮助,希望这对以后的人有所帮助。