五种主流数据库:字符串匹配

当我们不能完全确定需要查找的信息时,可以使用 SQL 模糊查找的功能进行文本检索,对应的运算符是 LIKE。

本文比较五种主流数据库对于文本模糊查找的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

字符串模糊匹配MySQLOracleSQL ServerPostgreSQLSQLite
[NOT] LIKE✔️✔️✔️✔️✔️
[NOT] ILIKE✔️
REGEXP_LIKE()✔️✔️✔️
[NOT] SIMILAR TO✔️
全文检索✔️✔️✔️✔️✔️

LIKE 运算符

假如我们想要知道姓“关”的员工有哪些,可以使用以下查询:

SELECT emp_name
FROM employee
WHERE emp_name LIKE '关%';

其中,LIKE 关键字指定了一个字符串匹配模式,查找姓名以“关”字开头的员工。查询返回的结果如下:

emp_name
--------
关兴 
关平 
关羽 

LIKE 运算符支持以下两个通配符,可以用于指定匹配的模式:

  • 百分号(%),表示匹配零个或者多个任意字符。
  • 下画线(_),表示匹配一个任意字符。

以下是一些常用的模式和匹配的字符串:

  • LIKE ‘en%’,匹配以“en”开始的字符串,例如“english”、“end”。
  • LIKE ‘%en%’,匹配包含“en”的字符串,例如“length”、“when”。
  • LIKE ‘%en’,匹配以“en”结束的字符串,例如“ten”、“when”。
  • LIKE ‘Be_’,匹配以“Be”开头,再加上一个任意字符的字符串。例如“Bed”、“Bet”。
  • LIKE ‘_e%’,匹配一个任意字符加上“e”开始的字符串,例如“he”、“year”。

由于百分号和下画线是 LIKE 运算符中的通配符,因此,如果我们查找的模式中包含了“%”或者“_”,就需要用到转义字符(escape character)。

转义字符可以将通配符当作普通字符使用。我们首先创建一个测试表:

CREATE TABLE t_like(c1 VARCHAR(200));
INSERT INTO t_like(c1) VALUES ('项目进度:25%已完成');
INSERT INTO t_like(c1) VALUES ('记录日期:2021 年 5 月 25 日');

表 t_like 只有一个字段 c1,数据类型为字符串,表中包含两条记录。假如现在我们需要查找包含“25%”的数据,其中百分号是要查找的内容而不是任意多个字符,可以使用转义字符进行查找:

SELECT c1
FROM t_like
WHERE c1 LIKE '%25#%%' ESCAPE '#';

ESACPE 关键字为 LIKE 运算符指定了一个 # 符号作为转义字符,因此查找模式中的第二个 % 代表了百分号,其他的 % 则是通配符。该查询返回的结果如下:

c1 
----------
项目进度:25%已完成

提示:对于 MySQL 和 PostgreSQL 而言,如果省略 ESCAPE 子句,默认的转义字符为 反斜杠(\)。

使用 LIKE 运算符进行文本查找时,还需要注意英文字母的大小写问题。例如,以下语句使用大写字母查找员工的电子邮箱:

SELECT email
FROM employee
WHERE email LIKE 'M%';

该查询在不同的数据库中返回的结果不同:

-- MySQL、Microsoft SQL Server 以及 SQLite
email 
----------------
madai@shuguo.com
mizhu@shuguo.com-- Oracle 以及 PostgreSQL
email
-----

对于 LIKE 运算符,MySQL、Microsoft SQL Server 以及 SQLite 中的字符串默认不区分大小写,Oracle 和 PostgreSQL 中的字符串默认区分大小写。

提示:PostgreSQL 提供了不区分大小写的 ILIKE 运算符,使用方法和 LIKE 相同。 Microsoft SQL Server 支持使用方括号匹配([])或者不匹配([^])指定范围或集合内的任何单个字符,例如[a-z]表示匹配字符 a 到字符 z。

NOT LIKE 运算符可以执行与 LIKE 运算符相反的操作,也就是返回不匹配某个模式的文本。例如,以下语句查找 t_like 表中不包含“25%”的记录:

SELECT c1
FROM t_like
WHERE c1 NOT LIKE '%25#%%' ESCAPE '#';

查询返回的结果如下:

c1 
---------------
记录日期:2021525

正则表达式函数

正则表达式能够提供更强大的模式匹配功能,MySQL、Oracle 以及 PostgreSQL 都提供了一些列的正则表达式函数,其中匹配字符串的函数是 REGEXP_LIKE()。例如:

SELECT regexp_like('SQL', '^s', 'c'), regexp_like('SQL', '^s', 'i');regexp_like('SQL', '^s', 'c')|regexp_like('SQL', '^s', 'i')|
-----------------------------+-----------------------------+0|                            1|

REGEXP_LIKE() 函数的第一个参数是搜索的字符串,第二个参数是正则表达式,第三个可选的参数指定是否区分大小写等匹配行为。

完整的正则表达式语法可以参考具体数据库文档。

PostgreSQL 还实现了 SIMILAR TO 运算符,它在 LIKE 运算符的基础上增加了一些正则表达式功能。例如:

-- PostgreSQL
SELECT 'SQL' SIMILAR TO '[A-Z]{3}';?column?|
--------+
true    |

其中,[A-Z] 表示大写字母,{3} 代表重复 3 次。

全文检索

全文检索通过将文本内容进行分词和索引,可以实现高效的全文搜索和语义查询。MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 都实现了数据库全文检索功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++入门【24-C++ 传递指针给函数】

C 允许您传递指针给函数&#xff0c;只需要简单地声明函数参数为指针类型即可。 下面的实例中&#xff0c;我们传递一个无符号的 long 型指针给函数&#xff0c;并在函数内改变这个值&#xff1a; 实例 #include <iostream>#include <ctime>using namespace std…

MySQL面试系列-02

1. 表分区有什么好处&#xff1f; 1、存储更多数据。分区表的数据可以分布在不同的物理设备上&#xff0c;从而高效地利用多个硬件设备。和单个磁盘或者文件系统相比&#xff0c;可以存储更多数据 2、优化查询。在where语句中包含分区条件时&#xff0c;可以只扫描一个或多个…

Docker查看镜像的Dockerfile

前言 在使用Docker构建应用程序时&#xff0c;我们可以通过Dockerfile定义应用程序的环境&#xff0c;并将其打包成一个镜像。有时&#xff0c;我们可能需要查看一个已经构建好的镜像的Dockerfile&#xff0c;以了解镜像是如何构建的&#xff0c;或者进行后续的修改和调整。本…

python股票分析挖掘预测技术指标知识之蜡烛图指标(6)

本人股市多年的老韭菜&#xff0c;各种股票分析书籍&#xff0c;技术指标书籍阅历无数&#xff0c;萌发想法&#xff0c;何不自己开发个股票预测分析软件&#xff0c;选择python因为够强大&#xff0c;它提供了很多高效便捷的数据分析工具包。 我们已经初步的接触与学习其中数…

【华为OD机试真题2023CD卷 JAVAJS】根据IP查找城市

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 根据IP查找城市 时间限制:3s 空间限制:256MB 限定语言:不限 题目描述: 某业务需要根据终端的IP地址获取该终端归属的城市,可以根据公开的IP地址池信息查询归属城市。地址池格式如下城市名=起始IP,结束IP,起始和结…

利用格式工厂,做视频的剪辑

接到一个工作&#xff0c;一段视频中&#xff0c;需要抠除其中某一段 其实 剪映、苹果手机的视频编辑功能&#xff0c;都可以轻松搞定 只是清晰度会有损伤 而且对于太大的视频&#xff0c;苹果手机就没法处理了。 很多软件在导出高清视频时&#xff0c;需要会员收费&#xff0…

【PHP】判断字符串是否是有效的base64编码

目录 1.检测长度&#xff1a; 2.检查字符集&#xff1a; 在PHP中&#xff0c;判断一个字符串是否是有效的Base64编码&#xff0c;可以通过以下几种方法&#xff1a; 1.检测长度&#xff1a; Base64编码的字符串长度必须是4的倍数&#xff08;对于标准的Base64编码&#xff…

什么是.jks(.keystore)文件

.jks 文件就是Java KeyStore (JKS)文件。它的用于存储加密密钥和证书。这个jks可以用在SSL加密&#xff0c;Android应用签名&#xff0c;Java应用等上面。 其实&#xff0c;我们还见过.keystore文件&#xff0c;它和.jks文件是一样的。 .jks 文件是.keystore 文件的其中一种。…

Java学习笔记-day02-在IDEA中使用git忽略提交.idea下的文件

1.在根目录.gitignore文件排除.idea目录 ### IntelliJ IDEA ### .idea2.使用重置Head还原已经add过的文件 创建项目时&#xff0c;可能会有.idea中的文件先add到git后再创建的.gitignore文件&#xff0c;导致文件commit时无法排除&#xff0c;如下所示。 使用重置Head将文件…

Python从入门到网络爬虫(JSON详解)

前言 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。和XML相比&#xff0c;JSON更加简洁和易于读写&#xff0c;同时也更加易于解析和生成。JSON的基本数据类型包括字符串、数字、布尔、null以及数组和对象两种复合类型。各种编程语言都…

深度学习 常考简答题--[HBU]期末复习

目录 1.为什么要引用非线性激活函数&#xff1f; 2.什么是超参数&#xff1f;如何优化超参数&#xff1f; 3.线性回归通常使用平方损失函数&#xff0c;能否使用交叉熵损失函数&#xff1f; 4.平方损失函数为何不适用于解决分类问题&#xff1f;(和第3题一块复习) ​编辑 …

新年新风貌 苏州金龙蔚蓝公交护航高贸区“效率巴士”!

1月4日&#xff0c;由苏州市公交集团园区公司与园区高贸区管委会联合推出的4条“高贸区效率巴士”正式开行&#xff0c;这四条线路惠及包括苏州群策科技有限公司、荣旗工业科技有限公司等在内的20余家高贸区重点企业。线路开行5天来&#xff0c;效率巴士让不少企业员工感受到了…

开发者与下雨天:一种独特的情感联结

在科技行业中&#xff0c;开发者是一个独特的群体&#xff0c;他们以逻辑严密的思维和对技术的执着追求为世界编织出无数精彩的数字画卷。而在日常生活中&#xff0c;一个常被提起的现象是许多开发者似乎对下雨天有着特别的喜爱。本文旨在探讨这种现象背后可能存在的心理、生理…

电口模块SFP-GE-T:实现光口与电口之间的转换

电口模块是一种用于实现光口转电口功能的设备&#xff0c;在网络通信中起到重要作用。电口模块没有光电转换的过程&#xff0c;只是传输电信号。本文介绍电口模块的作用、分类、以及使用方法。 一、什么是电口模块 电口模块又被称为光转电模块&#xff0c;它是一种支持热插拔…

LeetCode——447. 回旋镖的数量

大佬&#xff0c;牛&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你一个n*2的数组&#xff0c;表示n个点。然后让你从中选择三个点i,j,k&#xff0c;使得i到j和i到k的欧氏距离相等。问一共有多少种情况。需要注意的是&#xff0c;假设i,j,k是满足条件的&#xff0…

学校服务器安装anaconda并配置pytorch环境

学校服务器安装anaconda并配置pytorch环境 1.下载Anaconda2.传到xftp中3.在终端运行脚本命令4.安装pytorch4.1 查看cuda版本4.2 创建自己的环境4.3 下载pytorch4.4 验证pytorch是否安装成功 参考视频&#xff1a;远程服务器安装anaconda并配置pytorch环境 使用服务器运行项目&a…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》&#xff08;A&#xff09;试题&#xff08;开卷&#xff09; 题目&#xff1a;以某一 web 系统为测试对象&#xff0c;完成以下文档的编写&#xff1a; &#xff08;满分 100 分&#xff09; &#xff08;1&am…

简单易懂的理解 PyTorch 中 Transformer 组件

目录 torch.nn子模块transformer详解 nn.Transformer Transformer 类描述 Transformer 类的功能和作用 Transformer 类的参数 forward 方法 参数 输出 示例代码 注意事项 nn.TransformerEncoder TransformerEncoder 类描述 TransformerEncoder 类的功能和作用 Tr…

普中STM32-PZ6806L开发板(有点悲伤的故事)

简介 关于我使用 普中STM32-PZ6806L做了做了一些实验, 不小心输入12V&#xff0c;导致核心板等被烧坏, 为了利用电路和资源, 搭建了STM32F103CBT6并使用普中STM32-PZ6806L上面没有烧坏的模块的故事。 普中STM32-PZ6806L开发板 这块的STM32F103ZET6部分算是Closed了, 不准备换核…

docker compose 搭建ES集群的详细步骤,并去掉验证,使用http访问

要使用 Docker Compose 搭建一个 Elasticsearch 集群&#xff0c;并配置为不使用验证&#xff0c;同时使用 HTTP 访问&#xff0c;你可以遵循以下步骤&#xff1a; 步骤 1: 安装 Docker 和 Docker Compose 确保你的系统上已安装 Docker 和 Docker Compose。如果尚未安装&…