如何实现数据库多关键字模糊搜索

你好,我记得2 02 2 年有一个城市有一个项目。
当时我负责实现几个关键词的模糊搜索功能。
那时我正在使用Java。
我当时一无所知,所以我首先想到了一个SQL模板定义,写了“selectfromtbwhere”。
然后我想,好吧,我们遍历一下关键字数组,给每个关键字添加“titlelike'%'+数组值+'%'or”,就像这样。
不过后来我意识到需要把最后一个“或”去掉,不然执行起来会出现问题。
所以我使用“sql.substring(0,sql.length()-3 )+';'”来摆脱“或”。
然后当时我也想确认一下SQL没有问题,所以就打印了:System.out.println(sql);当它看起来顺眼时我才继续。
关于这个问题,我以后再想的时候,只要保证一下逻辑是否正确就可以了。
不要使用“and”,只使用“or”,因为我们想要匹配任何关键字。
综上所述,解决这个问题的关键是对SQL进行智能组合,逻辑组合,执行前检查。
就是这么简单。

数据库里是数组 1,11,111,1111 这样查询11是否在数组里 SQL语句怎么写能精确查呢 IN的话 111 和1111

说实话,这个SQL的写法看起来还是挺复杂的。
其中cidlike '1 5 ,%'... 表示从1 5 开始。
orcidlike '%,1 5 ,%'... 表示1 5 在中间。
最后一个像兰花一样的'%,1 5 '...这意味着最后是1 5
通过这种划分,您实际上可以涵盖三种情况。
但说实话,我以前也遇到过这种情况,我不明白为什么要这样写。
后来查了资料,发现Like就是这样使用的。
确实很乏味,而且很容易出错。

例如,如果您正在查看名为“客户”的表,则可以是:从具有“1 5 ,%”等 CID 或“%,1 5 ,%”等 CID 或“%,1 5 ”等 CID 的客户中选择。

这三种写法相加相当于检测出所有含有1 5 的CID,而不管1 5 位于何处。
但说实话,这样写让我头晕。

Presto(Trino) 与 Hive SQL 语法及函数的一些不同

Trino 和 Hive SQL 语法函数有很大不同。
我们来看看要点:
1 .数组下标完全相反。
Trino从1 开始,Hive从0开始。

2 数据类型也不兼容。
Trino 没有字符串和浮点数,而是使用 varchar 和 real。

3 Trino 是强类型的,所以 1 +'1 ' 直接报告错误。
Hive可以自动传输。

4 NULL 排序的处理方式不同。
Trino 默认为 NULL 位于末尾,Hive 位于前面。

5 Trino 的 LIMIT 语法要简单得多,并且支持 LIMIT count 和 LIMIT ALL。

6 Trino 没有横向视图爆炸。
请改用 UNNEST。
字符串处理也更糟糕。

7 几乎所有的时间函数都是不同的。
Trino 没有 to_date、from_unixtime 等。

8 字符串函数也不起作用。
Trino 没有 ifnull 和 concat 等常用函数。

9 计算功能更加不同。
Trino 没有 div、Rank 等,并且它以不同的方式处理数组函数。

1 0 JSON 函数也不兼容。
Trino使用json_extract_scalar,Hive使用get_json_object。

这些差异直接导致了更高的迁移成本。
特别是,由于强类型限制,Hive 中的隐式转换在 Trino 中会造成很大的问题。

自己找吧。
完整迁移将需要许多 SQL 更改。