五种主流数据库:常用字符函数
SQL 字符函数用于字符数据的处理,例如字符串的拼接、大小写转换、子串的查找和替换等。
本文比较五种主流数据库常用数值函数的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。
字符函数 | 函数功能 | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
---|---|---|---|---|---|---|
CHAR_LENGTH(s) | 返回字符串s包含的字符数量 | ✔️ | LENGTH(s) | LEN(s) | ✔️ | LENGTH(s) |
CONCAT(s1, s2, …) | 连接字符串 | ✔️ | ✔️ | ✔️ | ✔️ | || |
INSTR(s, s1) | 返回子串首次出现的位置 | ✔️ | ✔️ | PATINDEX(s1, s) | POSITION(s1 IN s) | ✔️ |
LOWER(s) | 返回字符串s的小写形式 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
OCTET_LENGTH(s) | 返回字符串s包含的字节数量 | ✔️ | LENGTHB(s) | DATALENGTH(s) | ✔️ | ❌ |
REPLACE(s, old, new) | 将字符串中的old替换为new | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
SUBSTRING(s, n, m) | 返回从位置n开始的m个字符 | ✔️ | SUBSTR(s, n, m) | ✔️ | ✔️ | ✔️ |
TRIM(s1 FROM s) | 删除字符串开头和结尾的子串 | ✔️ | ✔️ | ✔️ | ✔️ | TRIM(s, s1) |
UPPER(s) | 返回字符串s的大写形式 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
下面我们通过一些示例来说明这些函数的作用和注意事项。
字符串的长度
字符串的长度可以按照两种方式进行计算:字符数量和字节数量。在多字节编码中,一个字符可能占用多个字节。
CHAR_LENGTH(s) 函数用于计算字符串中的字符数量,OCTET_LENGTH(s) 函数用于计算字符串包含的字节数量。例如:
-- MySQL 和 PostgreSQL
SELECT CHAR_LENGTH('数据库'), OCTET_LENGTH('数据库');
查询返回的结果如下:
CHAR_LENGTH('数据库')|OCTET_LENGTH('数据库')
--------------------|---------------------3| 9
字符串“数据库”包含 3 个字符,在 UTF-8 编码中占用 9 个字节。MySQL 和 PostgreSQL 实现了这两个标准函数。
Oracle 使用 LENGTH(s) 函数和 LENGTHB 函数计算字符数量和字节数量,例如:
-- Oracle
SELECT LENGTH('数据库'), LENGTHB('数据库')
FROM dual;
查询返回的结果和上面的示例相同。
提示:PostgreSQL 也提供了 LENGTH(s) 函数,用于返回字符串中的字符数量。MySQL 也提供了 LENGTH(s) 函数,用于返回字符串中的字节数量。
Microsoft SQL Server 使用 LEN(s) 函数和 DATALENGTH(s) 函数计算字符数量和字节数量,例如:
-- SQL Server
SELECT LEN('数据库'), DATALENGTH('数据库');
查询返回的结果如下:
LEN|DATALENGTH
---|----------3| 6
字符串“数据库”在“Chinese_PRC_CI_AS”字符集中占用 6 个字节,每个汉字占用 2 个字节。
SQLite 只提供了 LENGTH(s) 函数,用于计算字符串中的字符个数,例如:
-- SQLite
SELECT LENGTH('数据库');
查询返回的结果如下:
LENGTH('数据库')
--------------3
连接字符串
CONCAT(s1, s2, …) 函数将两个或者多个字符串连接到一起,组成一个新的字符串。例如:
-- MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT CONCAT('S', 'Q', 'L');
查询返回的结果如下:
CONCAT('S', 'Q', 'L')
---------------------
SQL
Oracle 中的 CONCAT 函数一次只能连接两个字符串,例如:
SELECT CONCAT(CONCAT('S', 'Q'), 'L')
FROM dual;
我们通过嵌套函数调用连接多个字符串,查询返回的结果和上面的示例相同。
SQLite 没有提供连接字符串的函数,可以通过连接运算符(||)实现字符串的连接。例如:
-- SQLite、Oracle 以及 PostgreSQL
SELECT 'S' || 'Q' || 'L';
查询返回的结果和上面的示例相同。
提示:Oracle 和 PostgreSQL 也提供了连接运算符(||),Microsoft SQL Server 使用加号(+)作为连接运算符。
除 CONCAT 函数外,还有一个 CONCAT_WS(separator, s1, s2 , … ) 函数,可以使用指定分隔符连接字符串。例如:
-- MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT CONCAT_WS('-','S', 'Q', 'L');
查询返回的结果如下。
CONCAT_WS('-','S', 'Q', 'L')
----------------------------
S-Q-L
MySQL、Microsoft SQL Server 以及 PostgreSQL 实现了该函数。
大小写转换
LOWER(s) 函数将字符串转换为小写形式,UPPER(s) 函数将字符串转换为大写形式。例如:
SELECT LOWER('SQL'), UPPER('sql')
FROM employee
WHERE emp_id = 1;
查询返回的结果如下:
LOWER('SQL')|UPPER('sql')
------------|------------sql |SQL
提示:MySQL 中的 LCASE 函数等价于 LOWER 函数,UCASE 函数等价于 UPPER 函数。Oracle 和 PostgreSQL 还提供了首字母大写的 INITCAP 函数。
获取子串
SUBSTRING(s, n, m) 函数返回字符串 s 中从位置 n 开始的 m 个字符子串。例如:
-- MySQL、Microsoft SQL Server、PostgreSQL 以及 SQlite
SELECT SUBSTRING('数据库', 1, 2);
查询返回的结果如下:
SUBSTRING('数据库', 1, 2)
-----------------------
数据
Oracle 使用简写的 SUBSTR(s, n, m) 函数返回子串,例如:
-- Oracle、MySQL、PostgreSQL 以及 SQLite
SELECT SUBSTR('数据库', 1, 2)
FROM dual;
MySQL、PostgreSQL 以及 SQLite 也支持 SUBSTR 函数。查询结果和上面的示例相同。
另外,Oracle、MySQL 以及 SQLite 中的起始位置 n 可以指定负数,表示从字符串的尾部倒数查找起始位置,然后再返回子串。例如:
-- Oracle、MySQL 以及 SQLite
SELECT SUBSTR('数据库', -2, 2)
FROM employee
WHERE emp_id = 1;
查询返回的结果如下。
SUBSTR('数据库', -2, 2)
---------------------
据库
其中,-2 表示从右往左数第 2 个字符(“据”),然后再返回 2 个字符。
提示:MySQL、Microsoft SQL Server 以及 PostgreSQL 提供了 LEFT(s, n) 和 RIGHT(s, n) 函数,分别用于返回字符串开头和结尾的 n 个字符。
子串查找与替换
INSTR(s, s1) 函数查找并返回字符串 s 中子串 s1 第一次出现的位置。如果没有找到子串,则会返回 0。例如:
-- Oracle、MySQL 以及 SQLite
SELECT email, INSTR(email, '@')
FROM employee
WHERE emp_id = 1;
查询返回的结果如下:
email |INSTR(email, '@')
-----------------|-----------------
liubei@shuguo.com| 7
“@”是字符串“liubei@shuguo.com”中的第 7 个字符。
Microsoft SQL Server 使用 PATINDEX(s1, s) 函数查找子串的位置,例如:
-- Microsoft SQL Server
SELECT email, PATINDEX('%@%', email)
FROM employee
WHERE emp_id = 1;
其中,s1 参数的形式为 %pattern%,类似于 LIKE 运算符中的匹配模式。查询返回的结果和上面的示例相同。
PostgreSQL 使用 POSITION (s1 IN s) 函数查找子串的位置,例如:
-- PostgreSQL
SELECT email, POSITION('@' IN email)
FROM employee
WHERE emp_id = 1;
查询返回的结果和上面的示例相同。
REPLACE(s, old, new) 函数将字符串 s 中的子串 old 替换为 new。例如:
SELECT email, REPLACE(email, 'com', 'net')
FROM employee
WHERE emp_id = 1;
查询返回的结果如下:
email |REPLACE(email, 'com', 'net')
-----------------|----------------------------
liubei@shuguo.com|liubei@shuguo.net
REPLACE 函数在 5 种主流数据库中的实现一致。
截断字符串
TRIM(s1 FROM s) 函数删除字符串 s 开头和结尾的子串 s1。例如:
-- Oracle、MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT TRIM('-' FROM '--S-Q-L--'), TRIM(' S-Q-L ')
FROM employee
WHERE emp_id = 1;
第一个函数删除了开头和结尾的“-”;第二个函数省略了 s1 子串,默认表示删除开头和
结尾的空格。查询返回的结果如下:
TRIM('-' FROM '--S-Q-L--')|TRIM(' S-Q-L ')
--------------------------|-----------------
S-Q-L |S-Q-L
Oracle 中的参数 s1 只能是单个字符,其他数据库中的参数 s1 可以是多个字符。
SQLite 中的 TRIM(s, s1) 函数的调用格式与其他数据库不同,例如:
-- SQLite
SELECT TRIM('--S-Q-L--', '-'), TRIM(' S-Q-L ');
查询返回的结果和上面的示例相同。
提示:LTRIM(s)函数可以删除字符串开头的空格,RTRIM(s)函数可以删除字符串尾部的空格,这两个函数是 TRIM 函数的简化版。
相关文章:
五种主流数据库:常用字符函数
SQL 字符函数用于字符数据的处理,例如字符串的拼接、大小写转换、子串的查找和替换等。 本文比较五种主流数据库常用数值函数的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 字符函数函数功能MySQLOracleSQL ServerPostgreSQ…...
软考笔记--企业资源规划和实施
企业资源是指企业业务活动和战略运营的事物,包括人、财和物,也包括信息资源,同时也包括企业的内部和外部资源。企业资源可以归纳为物流,资金流和信息流。企业资源规划(ERP)是只建立在信息技术基础上&#x…...

React歌词滚动效果(跟随音乐播放时间滚动)
首先给audio绑定更新时间事件 const updateTime e > {console.log(e.target.currentTime)setCurrentTime(e.target.currentTime);};<audiosrc{currentSong.url}ref{audio}onCanPlay{ready}onEnded{end}onTimeUpdate{updateTime}></audio>当歌曲播放时间改变的时…...

java面试题之mybatis篇
什么是ORM? ORM(Object/Relational Mapping)即对象关系映射,是一种数据持久化技术。它在对象模型和关系型数据库直接建立起对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表的数据。 MyBatis通过…...

Java的编程之旅19——使用idea对面相对象编程项目的创建
在介绍面向对象编程之前先说一下我们在idea中如何创建项目文件 使用快捷键CtrlshiftaltS新建一个模块,点击“”,再点New Module 点击Next 我这里给Module起名叫OOP,就是面向对象编程的英文缩写,再点击下面的Finish 点Apply或OK均可 右键src…...

docker build基本命令
背景 我们经常会构建属于我们应用自己的镜像,这种情况下编写dockerfile文件不可避免,本文就来看一下常用的dockerfile的指令 常用的dockerfile的指令 首先我们看一下docker build的执行过程 ENV指令: env指令用于设置shell的环境变量&am…...

nginx高级配置详解
目录 一、网页的状态页 1、状态页的基本配置 2、搭配验证模块使用 3、结合白名单使用 二、nginx 第三方模块 1、echo模块 1.1 编译安装echo模块 1.2 配置echo模块 三、nginx变量 1、内置变量 2、自定义变量 四、自定义图标 五、自定义访问日志 1、自定义日志格式…...

小程序--分包加载
分包加载是优化小程序加载速度的一种手段。 一、为什么进行分包 小程序限制单个包体积不超过2M; 分包可以优化小程序页面的加载速度。 二、启用/使用分包语法subPackages subPackages:下载app.json文件中 root:分包所在的目录 pages&#x…...
R语言【base】——writeLines()
Package base version 4.2.0 Description 向连接写入文本行。 Usage writeLines(text, con stdout(), sep "\n", useBytes FALSE) Arguments 参数【text】:一个字符向量。 参数【con】:一个 connection 对象 或 一个字符串。 参数【se…...
微信小程序-人脸检测
微信小程序的人脸检测功能,配合蓝牙,配合ESP32 可以实现一些有趣的玩具 本文先只说微信小程序的人脸检测功能 1、人脸检测使用了摄像头,就必须在用户隐私权限里面声明。 修改用户隐私声明后,还需要等待审核,大概一天 …...

微信小程序自制动态导航栏
写在前面 关于微信小程序导航栏的问题以及解决办法我已经在先前的文章中有提到,点击下面的链接即可跳转~ 🤏微信小程序自定义的导航栏🤏 在这篇文章中我们需要做一个这样的导航栏!先上效果图 👇👇…...

金融知识分享系列之:五日线
金融知识分享系列之:五日线 一、股票均线二、五日线三、五日线加量能三、五日线案例四、五日线案例五、五日线案例六、五日线案例七、五日线案例八、五日线案例 一、股票均线 股票均线是一种用于平滑股票价格的指标。它是根据一段时间内的股票价格计算得出的平均值…...

回归测试详解
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 什么是回归测试 回归测试(Regression testi…...

渲染效果图有哪几种分类?效果图为什么用云渲染更快
云渲染利用了集群化的云端服务器资源,通过并行计算充分发挥了高性能硬件的优势,显著提升了渲染的速度。这一技术特别适用于处理规模庞大或细节丰富的渲染任务,在缩短项目完成时间方面表现卓越。无论是用于为建筑提供精确的可视化效果图&#…...

Docker镜像加速
前言 众所周知,我们常用的一些工具或系统的下载源都是国外的,这就会导致我们在下载一些东西时,会导致下载巨慢或者下载失败的情况,下面便是docker换下载源的教程 镜像加速 下面是几个常用的国内的镜像 科大镜像:ht…...

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择
以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit)线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…...
Alias许可分析中的数据可视化
Alias许可分析中的数据可视化:引领企业洞察合规之道的明灯 在信息化时代,数据可视化已成为各行各业的重要工具,能够帮助用户直观地理解和分析复杂的数据。在Alias许可分析中,数据可视化同样发挥着至关重要的作用,为企…...

【计算机网络】数据链路层--以太网/MTU/ARP/RARP协议
文章目录 一、以太网1.以太网帧格式2.MAC地址3.局域网的转发原理 二、MTU1.什么是MTU2.MTU对IP协议的影响3.MTU对UDP影响4.MTU对于TCP协议的影响 三、ARP协议1.ARP协议的作用2.ARP数据报的格式3.ARP协议的工作流程 一、以太网 “以太网” 不是一种具体的网络, 而是一种技术标准…...

typescript使用解构传参
看下面这个函数 interface Student {id: number;name: string;class: string;sex: string;}function matriculation(student: Student) {//...}我们要调用它,就需要传递一个实现了Student约束的对象进去 interface Student {id: number;name: string;class: string;sex: string…...

CSP-J 2023 复赛第4题:旅游巴士
【题目来源】https://www.luogu.com.cn/problem/P9751https://www.acwing.com/problem/content/description/5313/【题目描述】 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n 处地点,在这些地点之间连有 m 条道路。 其中…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...