SQL备忘--函数

数据处理函数

函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLite
ABS(x)计算x的绝对值
CEIL(x)
CEILING(x)
大于等于x的最小整数CEIL(x)CEILING(x)CEIL(x)
FLOOR(x)小于等于x的最大整数
MOD(x)x除以y的余数(x%y)x % yx % y
ROUND(x,n)x四舍五入到n位小数
RANDOM(x)返回伪随机数(0~1区间)DBMS_RANDOMRAND()RAND()
随机计算:
  • ORACLE的随机计算语法:
SELECT DBMS_RANDOM.VALUE
FROM table_name
WHERE c1="xxxx"
  • 对Mysql/SQL Server数据库,多次执行Random()获取到的随机数一般是不重复的; 可以通过入参指定种子,来使多次执行获取同一随机数
SELECT RAND(1)
FROM table_name
WHERE c1="xxxx"
  • 对PostgreSQL数据库, 可以通过SETSEED()函数指定种子,来使多次执行获取同一随机数
SELECT SETSEED(0);			--设置种子
SELECT RANDOM();

统计聚合

1. COUNT()、SUM()、AVG()等聚合函数,不会统计NULL的值

如果指定COUNT()内统计某个字段,则不会统计此字段为NULL的数据

	对AVG()来说,NULL的忽略会作用在分母上,使得总数量也变少

如果要把NULL当零来处理,需要用CASE进行转换

SELECT AVG(CASE WHEN score IS NULL THEN 0 ELSE score END)
FROM student
2. 将统计出的结果,拼接成一条数据返回
  • Oracle: LISTADD
SELECT LISTADD(name, ",")
FROM student
WHERE score > 80
  • Mysql: GROUP_CONCAT
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ";")
FROM student
WHERE score > 80
  • Microsoft SQL Server: STRING_ADD
SELECT STRING_ADD(name, ',') WITHIN GROUP (ORDER BY name)
FROM student
WHERE score > 80
  • PostgreSQL: STRING_ADD
SELECT STRING_ADD(name, ',' ORDER BY name)
FROM student
WHERE score > 80

字符处理函数

函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLite
CHAR_LENGTH(s)字符串s包含的字符数量LENGTH(s)LEN(s)LENGTH(s)
OCTET_LENGTH(s)字符串s包含的字节数量LENGTHB(s)DATALENGTH(s)×
CONCAT(s1,s2,…)连接子字符串,拼成更长的字符串连接运算符(双竖线)
CONCAT_WS(spe, s1,s2,…)用spe连接各子字符串××
INSTR(s, s1)s中首次出现s1的位置PATINDEX(s1, s)POSITION(s1 in s)
LOWER(s)s转小写字母
UPPER(s)s转大写字母
REPLACE(s, old, new)替换s中的字符串到新的字符串
SUBSTRING(s, n, m)截取s中n开始的m个字符SUBSTR(s, n, m)
LEFT(s, n)
RIGHT(s, n)
返回开头或结尾n个字符××
TRIM(s1 FROM s)删除字符串开头和结尾的子串TRIM(s, s1)
细节:
  • Mysql的LENGTH(s), 返回的是字节数量; PostgreSQL的LENGTH(s), 返回的是字符数量
  • Oracle 的CONCAT(),一次只能连接两个字符串;如果需要连接多个,可以嵌套:
SELECT CONCAT(CONCAT('S', 'Q'), 'L')
  • MYSQL、PostgreSQL、SQLite的SUBSTR(s, n, m)的起始位置n,可以为负数,表示从字符串结尾向前数n个位置,此处为起始index,再向后数m个字符串截取
  • TRIM(s, s1)如省略s1,则表示去除开头结尾的空格;
  • 此外还有两个函数:LTRIM(s)和RTRIM(s),可以分别去除开头及结尾的空格
NULL对字符函数的影响
  • Oracle/Microsoft SQL Server 及 PostgreSQL中CONCAT()函数将NULL空值当做空字符串’'处理,因此合并时会忽略
  • Mysql中不会当做空字符串,而是NULL与任何值合并后还是NULL,因此最后结果为NULL

日期处理函数(变量)

函数功能OracleMysqlMicrosoft SQL ServerPostgreSQLSQLite
CURRENT_DATE当前日期GETDATE()
CURRENT_TIME当前时间×GETDATE()
CURRENT_TIMESTAMP当前日期及时间
EXTRACT(p FROM dt)提取日期中的部分信息DATEPART(p, dt)STRRFTIME
dt1-dt2计算两个日期之间的天数DATEDIFF(dt2, dt1)DATEDIFF(p, dt1, dt2)STRRFTIME
dt1-INTERVAL日期加上一个时间间隔DATEADD(p, n, dt)STRRFTIME
以上部分为变量,使用方式如下:
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
提取日期:

EXTRACT()用法

SELECT EXTRACT(YEAR FROM CURRENT_DATE);

FROM前的关键字有:YEARMONTHDAYHOURMINUTESECOND

SQLite 的使用方式:

SELECT STRFTIME('%Y', h_date);

FROM前的关键字有:%Y%m%d%H%M%S

日期加减计算:
-- Oracle和PostgreSQL使用方式
SELECT DATE '2023-10-08' - DATE '2023-10-01',		-- 两个时间的差值
DATE '2023-10-01' + INTERVAL '3' DAY			-- 日期加3天
-- Mysql使用方式
SELECT DATEDIFF('2023-10-08', DATE '2023-10-01') ,		-- 两个时间的差值
DATE '2023-10-01' + INTERVAL '3' MONTH;			-- 日期加3个月
-- SQL Server使用方式
SELECT DATEDIFF(DAY, '2023-10-08','2023-10-01') ,		-- 两个时间的差值
DATE DATEADD(MONTH, 1, '2023-10-01');					-- 日期加1个月

类型转换函数

CAST(expr AS type) 用于将数据转换为其他类型

SELECT CAST('123' AS INTEGER); 			-- 转换为数字123

类型转换可能会导致精度丢失

-- 隐式类型转换
SELECT '234' + 123; 		-- 最后可能得到357

条件表达式

CASE

功能:
根据某个表达的执行结果,匹配对应的值

语法:

CASE expressionWHEN value1 THEN c1WHEN value2 THEN c2...ELSE default_value
END	

具体例子:

SELECT c1,CASE c2WHEN 'a' THEN 1WHEN 'b' THEN 2ELSE 0END	
FROM table_name;

还可用在WHERE、ORDER BY等子句中:

SELECT c1,CASE c2WHEN 'a' THEN 1WHEN 'b' THEN 2ELSE 0END	
FROM table_name
WHERE c1="xxx"
ORDER BY CASEWHEN c2 IS NULL THEN 0ESLE c2END;
IF函数

MYSQL提供了一个IF(expr1, val1, val2)函数,类似于java的 expr1?val1:val2三目表达式

IF(3<2, '3<2', '3>=2')

SQL Server、SQLite没有提供IF函数,提供的是的IIF函数,用法与Mysql的IF函数一样


空值处理

COALESCE函数

COALESCE(exp1, exp2, exp3, …)接收一个输入列表,返回第一个非NULL的参数;若都为空,则返回NULL

SELECT COALESCE(yuwen_score, shuxue_score, yingyu_score)
FROM student

可以用COALESCE将NULL转换为别的默认值,类似于CASE WHEN

SELECT COALESCE(yuwen_score, 0)   -- 若语文成绩为NULL, 则记为0分
FROM student

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

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

相关文章

基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP

最近我在 International Journal of Digital Earth &#xff08;《国际数字地球学报》&#xff09;发表了一篇森林生物量模型构建的文章&#xff1a;Evaluation of machine learning methods and multi-source remote sensing data combinations to construct forest above-gro…

欧科云链研究院:如何降低Web3风险,提升虚拟资产创新的安全合规

在香港Web3.0行业&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;但另一方面&#xff0c;JPEX诈骗案等行业风险事件也接连发生&#xff0c;为Web3行业发展提供了重要警示。在近期的香港立法会施政报告答问会上&#xff0c;行政长官李家超表示&#xff0c;与诈骗…

C++进阶语法——STL 标准模板库(下)(Standard Template Library)【学习笔记(七)】

文章目录 STL 代码示例1、迭代器2、算法3、array容器示例4、vector示例5、deque&#xff08;double ended queue&#xff0c;双端数组&#xff09;示例6、list&#xff08;链表&#xff09;容器7、set示例8、map示例9、stack 示例10、queue示例11、priority_queue &#xff08;…

FFmpeg系列索引

第一章 初识FFmpeg https://blog.csdn.net/huantianxidi/article/details/134130159 第二章 ffplay是什么 https://blog.csdn.net/huantianxidi/article/details/134151043

图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】

目录 一、前言二、统计区域度量2.1&#xff1a;图像矩特征2.1.1&#xff1a;原始矩/几何矩2.1.2&#xff1a;中心距2.1.3&#xff1a;归一化的中心矩2.1.4&#xff1a;不变矩——Hu矩2.1.5&#xff1a;OpenCv实现矩特征及其应用 2.2&#xff1a;点度量特征2.3&#xff1a;全局直…

在 GORM 中定义模型

为实现与数据库的无缝交互而打造有效模型的全面指南 在使用 GORM 进行数据库管理时&#xff0c;定义模型是基础。模型是您的应用程序的面向对象结构与数据库的关系世界之间的桥梁。本文深入探讨了在 GORM 中打造有效模型的艺术&#xff0c;探讨如何创建结构化的 Go 结构体&…

从零开始的目标检测和关键点检测(三):训练一个Glue的RTMPose模型

从零开始的目标检测和关键点检测&#xff08;三&#xff09;&#xff1a;训练一个Glue的RTMPose模型 一、重写config文件二、开始训练三、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测和关键点检测…

若依微服务集成Mybatis-plus详细教程

本章教程,主要介绍,若依开源框架微服务版本,如何集成Mybatis-plus。 目录 一、引入依赖 1、在根pom.xml中的properties里加入Mybatis-plus版本 2、在根pom.xml中引入Mybatis-plus依赖

C++学习

一、C基本介绍 1.1 C是什么 C是一种通用的、高级的编程语言&#xff0c;它是C语言的扩展和改进版本。C由Bjarne Stroustrup博士在20世纪80年代初开发&#xff0c;旨在为程序员提供更多的功能和工具&#xff0c;以便更轻松地编写复杂的软件程序。 拜一拜祖师爷&#xff0c;保佑在…

左移测试,如何确保安全合规还能实现高度自动化?

「云原生安全既是一种全新安全理念&#xff0c;也是实现云战略的前提。 基于蚂蚁集团内部多年实践&#xff0c;云原生PaaS平台SOFAStack发布完整的软件供应链安全产品及解决方案&#xff0c;包括静态代码扫描Pinpoint&#xff0c;软件成分分析SCA&#xff0c;交互式安全测试IA…

二、GRE VPN

GRE VPN 1、GRE介绍2、GRE基本原理3、GRE报文格式4、报文在GRE中传输过程5、价值6、Keepalive检测7、GRE应用8、配置GRE隧道8.1、配置绑定GRE协议的接口8.2、配置Tunnel接口8.3、配置Tunnel路由 9、GRE配置举例9.1、GRE静态路由示例9.1.1、路由器运行动态路由协议实现互通9.1.2…

NEFU数字图像处理(3)图像分割

一、图像分割的基本概念 1.1专有名词 前景和背景 在图像分割中&#xff0c;我们通常需要将图像分为前景和背景两个部分。前景是指图像中我们感兴趣、要分割出来的部分&#xff0c;背景是指和前景不相关的部分。例如&#xff0c;对于一张人物照片&#xff0c;人物就是前景&…

mysql迁移data目录(Linux-Centos)

随着时间的推移&#xff0c;mysql的数据量越越大&#xff0c;使用yum默认安装的目录为系统盘 /var/lib/mysql&#xff0c;现重新挂载了一个硬盘&#xff0c;需要做数据目录的迁移到 /mnt/data/。以解决占用系统盘过高情况。 1.强烈建议这种操作。镜像一个一样的Centos系统&…

系统架构设计师-第18章-安全架构设计理论与实践-软考学习笔记

安全架构概述 信息的可用性、元略性、机密性、可控性和不可抵赖性等安全保障显得尤为重要&#xff0c;而满足这些诉求&#xff0c;离不开好的架构设计. 信息安全面临的威胁 常见的安全威胁有以下几种. (1)信息泄露 (2) 破坏信息的元整性: 数据被非授极地进行增删、修改成破坏…

MyBatis无法读取XML中的Method的乌龙事件

事件背景 同事反馈&#xff0c;相同的jar包&#xff0c;在多人本地的电脑、多台服务器中&#xff0c;都是可以正常启动的&#xff0c;只有在其中一台服务器&#xff0c;简称它为A&#xff0c;无法启动&#xff0c;因为启动后的初始化操作中有一个调用mybatis方法的操作&#x…

11.Linux系统:定时任务备份mysql数据库为文件并传输到其他服务器

1. 创建脚本 mysql_dumps.sh内容如下&#xff1a; #!/bin/bash # 查找名称为“mysql_mysql”的容器id CONTAINER_IDdocker ps -a | grep "mysql_mysql" | awk {print $1} | head -n 1 MYSQL_USERNAME"root" MYSQL_PASSWORD"root" FILENAME_SU…

【CSDN 每日一练 ★★☆】【动态规划】最小路径和

【CSDN 每日一练 ★★☆】【动态规划】最小路径和 动态规划 题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 示例 1&#x…

我的云栖大会之旅:见证云计算创新的15年

云栖大会&#xff0c;曾经是一次不可思议的科技之旅&#xff0c;却如今已见证了我对云计算世界的15年关注和发展。第一次踏上云栖大会之旅&#xff0c;我记得是在2009年。那时的云计算还是一个新生事物&#xff0c;而云栖大会正是其中的奠基石。 我清楚地记得那个炎热的夏天&am…

ant-design-vue select选择框无法显示placehoder

将绑定的对应值设置成undefined <a-selectv-model:value"formState.classification"option-filter-prop"children"allow-clearplaceholder"商户分类"><a-select-optionv-for"item of Object.values(Const.POINTMERCHNANDISE.TYPE…

R -- 体验 stringdist

文章目录 安装使用stringdist :返回列表example stringdistmatrix &#xff1a;返回矩阵example amatch & ain延伸&#xff1a;距离计算公式Hamming distanceLongest Common Substring distanceLevenshtein distance (weighted)The optimal string alignment distance dosa…