五种主流数据库:常用字符函数
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 条道路。 其中…...
JAVA算法和数据结构
一、Arrays类 1.1 Arrays基本使用 我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下 public…...
每日五道java面试题之spring篇(七)
目录: 第一题. 什么是Spring beans?第二题. 一个 Spring Bean 定义 包含什么?第三题. 如何给Spring 容器提供配置元数据?Spring有几种配置方式?第四题. Spring基于xml注入bean的几种方式?第五题:你怎样定义类的作用域…...
Keil编译GD32工程时找不到lib库文件
D:\Keil5\ARM\ARMCLANG\Bin\..\lib\armlib\mc_p.l:SELECTION_SCRIPT(2974): error: L6907E: Expected an expression. 问题 解决方法:因为编译器没有找到那个函数的代码,也就未解析了 其实问题很简单,把你的lib文件加进去,ok了…...
测试C#使用ViewFaceCore实现图片中的人脸遮挡
基于ViewFaceCore和DlibDotNet都能实现人脸识别,准备做个遮挡图片中人脸的程序,由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系,最终决定使用ViewFaceCore实现图片中的人脸遮挡。 新建Winform项目,在Nuget包管理器中…...
2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽
思维导图 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",…...
300分钟吃透分布式缓存-16讲:常用的缓存组件Redis是如何运行的?
Redis 基本原理 Redis 简介 Redis 是一款基于 ANSI C 语言编写的,BSD 许可的,日志型 key-value 存储组件,它的所有数据结构都存在内存中,可以用作缓存、数据库和消息中间件。 Redis 是 Remote dictionary server 即远程字典服务…...
上一篇文章补充:已经存在的小文件合并
对于HDFS上已经存在的大量小文件问题,有多种策略可以进行处理和优化: 1. **合并小文件**: - **使用Spark作业合并**:通过编写Spark程序读取小文件并调用repartition()或coalesce()函数重新分区数据,然后将合并后的…...
代码随想录训练营第三十期|第四十三天|动态规划 part05|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 II - 力扣(LeetCode) class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int n : stones) {sum n;}int target sum / 2;int[] dp new int[target 1];for (int i 0; i < stones.length; i…...
c++学习记录 string容器—字符串插入和删除
函数原型: string& insert(int pos,const char* s); //插入字符串string& insert(int pos,const string& str); //插入字符串string& insert(int pos,int n,char c); //在指定位置插入n个字符cstring&…...
【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)
2024年第九届智能计算与信号处理国际学术会议(ICSP 2024) 2024年第八届智能计算与信号处理国际学术会议(ICSP 2024)将在西安举行, 会期是2024年4月19-21日, 为期三天, 会议由西安科技大学主办。 欢迎参会&…...
建设简单网站/网络营销策略分析方法
想必我们很多人都知道“吾日三省吾身”的意思,就是告诫我们要经常的反省、检讨、及时的修正纠偏,但反思什么检讨什么呢?原文已经告诉我们了,在《论语学而》中这样写到,曾子曰:吾日三省吾身----为人谋而不忠…...
如何选择网站的关键词/国外新闻最新消息
301. 删除无效的括号 删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。 说明: 输入可能包含了除 ( 和 ) 以外的字符。 示例 1: 输入: “()())()” 输出: ["()()()", “(())()”] 示例 2: 输入: “(a)())()” 输出: [&q…...
竞网做的网站怎么/新闻类软文
现在都知道运维自动化的重要性,尤其是对于在服务器数量按几百台、几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,根本是不可想象的。 运维自动化安装方面,早期一般使用人工配置pxedhcptftp配合kickstart&…...
烟台做网站工资/活动推广软文范例
我已经用python导入了一个json文件,并且仍然读取了第一个json元素我需要添加一个循环来读取所有文件JSON文件内容[{"severity": 4,"status": "OPEN","id": 1987,"description": "Multiple Login Failures f…...
整人网站怎么做/sem分析是什么
我正在使用弹簧靴.我有一个休息的api POST调用,我需要使用x-www-form-urlencoded发送正文,调用不需要头文件.我可以从邮递员中获取此URL,并在db中成功创建一行.但是当我尝试从Java端调用它时,我收到400个错误的请求异常.以下是我在Java中尝试过的内容.MultiValueMap map new L…...
郑州门户网站建设哪家好/宁波最好的seo外包
如何让workBench识别到config下的BSP包 问题:在vxworks6.8(workBench3.2)或者vxworks6.9(workBench3.3)下建立vxworks Image Project时,如何让workBench识别BSP并自动添加。Example:如下图,建立vxworks Image Project工程时 如何在BSP:栏识别到petSbcP2010_AAAAAAAAA(…...