sql查询如何实现读出指定“字段”包含指定“字符”的记录集?

嘿,说到数据库查询,我在这方面有一些经验。
记得刚入行的时候,当时SQL还很流行,我就迷上了。

说实话,当时最头疼的就是如何过滤数据。
例如,如果要查找字段值包含特定字符的数据,LIKE 关键字特别有用。
就像你提到的例子一样,从数据表名称中选择字段2 ,其中字段2 类似于'%3 %',这意味着查找数据表中字段2 包含字符“3 ”的所有记录。

我记得有一次,我帮助一家公司清理数据。
他们的需求之一是找到客户信息中电话号码后三位数字为“3 ”的客户。
当时我就这样写了查询语句,结果出来了很多,其实省了不少力气。

但是,如果您想知道字段 2 的值是否为“3 ”,那就不同了。
这时候就不能用LIKE了,必须用=。
这样写:从数据表名称中选择field2 ,其中field2 = '3 '。
这意味着仅找到字段 2 的值恰好为“3 ”的记录。

有趣的是,有时由于对SQL不熟悉,有些人不小心误用了它。
例如,他们想要查找包含“3 ”但使用 = 的记录,但没有找到任何内容。
我当时也犯过这样的错误,我不明白如何解决。
后来向上级请教,才发现这两种用途。

需要明确的是,LIKE和=是SQL查询中非常重要的两个。
是关键词。
如果使用得当,可以节省很多时间。
如果使用不当,您将不得不花费时间进行故障排除。
虽然我没有亲自开过这个区域,但我记得数据在X左右,但我建议你验证一下。
毕竟,对于数据库而言,细节很重要。

SQL 通配符

SQL 通配符可以让您无需那么精确地查找事物,就像查找差异一样。
主要有以下几种:
1 . 百分号 (%):要查找任意长度的内容,例如,如果要查找以 a 开头的所有内容,请使用 LIKE 'a%'。
2 . 下划线(_):查找特定字符。
例如,如果要查找第二个字母是 a 的字符,请使用 LIKE '_a%'。
3 . 方括号([]):查找某个范围内的字符。
例如,如果要查找以 a、b 或 c 开头的字符,请使用 LIKE '[a-c]%'。
4 .插入符(^):查找不在范围内的字符。
例如,如果要查找不以数字开头的字符,请使用 LIKE '^[^0-9 ]%'。
5 .转义字符(ESCAPE):如果通配符本身要作为普通字符使用,就必须使用这个。
例如,如果要查找百分号,则必须使用 LIKE '%%%' ESCAPE ''。

注意,使用通配符时要小心,它可能会让你的查询像蜗牛一样慢。
而且,不同的数据库对通配符的支持可能不同,所以你需要知道你使用的是哪种数据库。

如何在SQL中使用LIKE操作符?模糊查询的实现方法

说白了,LIKE运算符就是数据库中的“模糊搜索”,但使用起来也有陷阱。

先说最重要的两点:第一,%和_是主键,但是领先%会让索引失去作用。
去年我们在跑那个电商项目的时候,用“%fruit%”查商品名的时候,QPS直接跌破了3 000。
我们使用“fruit%”立即恢复。
其次,ESCAPE是为了紧急使用而设计的,而不应该作为常规武器使用。
有一个客户表,其中包含所有带 % 的 ID。
我坚持使用“%”作为转义符,最后更改字段类型解决了问题。
一开始我以为可以任意选择转义字符,后来发现有些DB把特殊字符当作正则表达式处理。
说实话,当时很混乱。

还有一点:全文检索是模糊查询的终极解决方案。
当您看到必须同时匹配“水果”和“苹果”的场景时,LIKE 根本不够。
您可以直接使用 PostgreSQL 的 pg_trgm 或 MySQL 的 FULLTEXT 扩展。
但需要注意的是,全文检索对中文分词有要求,否则无法用“苹果”搜索“苹果”。
等等,还有一件事。
不要忽视区分大小写的问题。
PostgreSQL的COLLATE比MySQL的BINARY更灵活,但是在使用它之前你需要确认你的客户端的编码。

最后提醒:对数字列使用 LIKE 将导致自动类型转换。
WHERE id LIKE '1 00%' 可以触发隐式转换。
直接使用数学运算会快1 00倍。
很多人不注意这一点。