SQL数据分析常用函数

SQL 中有许多常用的函数,可以用于处理和操作数据。以下是一些常见的SQL 函数:

1. 字符串函数:

  • CONCAT(str1, str2, …): 用于把多个文本字符串合并成一个长字符串(参数中有null时返回null)。
select concat('一起','学', 'SQL');
-- 输出结果:'一起学SQL'
select concat('一起','学',null,'SQL');
-- 输出结果:''
  • UPPER(str) 将字符串转换为大写。
select upper('sql');
-- 输出结果:'SQL'
select upper('sQl');
-- 输出结果:'SQL'
  • LOWER(str): 将字符串转换为小写。
select lower('SQL');
-- 输出结果:'sql'
select lower('sQl');
-- 输出结果:'sql'
  • TRIM(str): 去除字符串两端空格。
select trim('          一起学SQL          ');
-- 输出结果:'一起学SQL'
  • LTRIM(str): 去除字符串左端的空格。
select ltrim('          一起学SQL          ');
-- 输出结果:'一起学SQL          '
  • RTRIM(str):: 去除字符串右端的空格。
select rtrim('          一起学SQL          ');
-- 输出结果:'          一起学SQL'
  • LEFT(str,length): 返回字符串的左侧指定长度的部分。
select left('一起学SQL',3);
-- 输出结果:'一起学'
  • RIGHT(str,length): 返回字符串的右侧指定长度的部分。
select right('一起学SQL',3);
-- 输出结果:'SQL'
  • MID(str, start, length): 返回字符串的指定起始位置和长度的部分。
select mid('一起学SQL',3,3);
-- 输出结果:'学SQ'
  • INSTR(str,substr): 返回子字符串substr在文本字符串str中第一次出现的位置(文本字符串中不包含该子字符串时返回0)
select instr('EABCDDBCA','A');
-- 输出结果:'2'
  • LENGTH(str): 返回字符串的长度。
select length('sql');
-- 输出结果:'3'
  • SUBSTRING(str, start, length): 返回字符串的子字符串。
    str 是要操作的字符串。
    start 是子字符串的起始位置,索引从 1 开始。
    length 是要提取的子字符串的长度。
    注: SUBSTRING 函数在提取子字符串时,索引是基于字符位置的,索引从 1 开始而不是从 0 开始。如果提供了负数的起始位置,则表示从字符串末尾开始计数。
SELECT SUBSTRING('一起学SQL', 4, 3);
-- 输出结果:'SQL'
SELECT SUBSTRING('一起学SQL', -3);
-- 输出结果:'SQL'
  • **REPEAT(str, num): **返回重复多次的字符串。
SELECT REPEAT('SQL', 3);
-- 返回结果: 'SQLSQLSQL'
  • **REVERSE(str): **反转字符串。
SELECT reverse('SQL');
-- 返回结果: 'LQS'
  • REPLACE(str, old_str, new_str): 替换字符串中的子字符串。
SELECT replace('一起学SQL','SQL','sql');
-- 返回结果: '一起学sql'

2. 数学函数:

  • ABS(num): 返回一个数的绝对值。
select abs(-15);
-- 返回结果:'15'
  • ROUND(num, d): 返回保留d位小数(d的默认值为0)的四舍五入值
select round(3.1415926,3);
-- 返回结果:'3.142'
  • CEILING(num) : 向上取整,返回大于或等于给定数字 x 的最小整数。
SELECT ceiling(5.3); 
-- 返回结果:'6'
  • **FLOOR(num)😗*向下取整,返回小于或等于给定数字 x 的最大整数。
SELECT floor(5.3); 
-- 返回结果:'5'
  • RAND(): 返回在范围0到1.0内的随机浮点值
select rand();
-- 返回结果:'0.7459539144727904'

3. 日期时间函数:

3.1提取

  • NOW(): 返回当前日期和时间。
    返回值所处上下文是字符串:以 ‘yyyy-mm-dd hh:mm:ss’ 格式返回当前日期时间
    返回值所处上下文是数字:以 ‘yyyymmddhhmmss’ 格式返回当前日期时间
select now();
-- 返回结果:'2024-05-20 15:21:08'
select now()+0;
-- 返回结果:'20240520152119'
  • CURDATE(): 返回当前日期。
select curdate();
-- 返回结果:'2024-05-20'
  • CURTIME(): 返回当前时间。
select curtime();
-- 返回结果:'16:10:49'
  • DATE(): 提取日期部分。
    SELECT DATE(‘2024-05-20 12:34:56’);
select curtime();
-- 返回结果:'16:10:49'
  • TIME(): 提取时间部分。
select time('2024-05-20 12:34:56');
-- 返回结果:'12:34:56'
  • WEEK(date,n): 提取指定日期是一年中的第几周。
    ①默认(n为0或空值):
    周从周日开始,周六结束。
    1月1日所在的周被认为是第1周。
    如果1月1日是周四或更晚,该周被认为是一年中的第1周;否则,它被认为是一年中的最后一周。
    ②n=1:
    周从周一开始,周日结束。
    1月1日所在的周被认为是第1周。
    如果1月4日是周一或更早,该周被认为是一年中的第1周;否则,它被认为是一年中的最后一周。
    ③n=2:
    周从周日开始,周六结束。
    1月1日所在的周被认为是第1周。
    如果1月4日是周一或更早,该周被认为是一年中的第1周;否则,它被认为是一年中的最后一周。
    ④n=3:
    周从周一开始,周日结束。
    1月1日所在的周被认为是第1周。
    如果1月1日是周四或更晚,该周被认为是一年中的第1周;否则,它被认为是一年中的最后一周。
select week('2024-05-20 12:34:56');
-- 返回结果:'20'
select week('2024-05-20 12:34:56',1);
-- 返回结果:'21'
  • YEAR(): 提取年份。
select year('2024-05-20 12:34:56');
-- 返回结果:'2024'
  • QUARTER(): 提取季度。
select quarter('2024-05-20 12:34:56');
-- 返回结果:'2'
  • MONTH(): 提取月份。
select month('2024-05-20 12:34:56');
-- 返回结果:'5'
  • DAY(): 提取日期中的天数。
select day('2024-05-20 12:34:56');
-- 返回结果:'20'
  • HOUR(): 提取小时部分。
select hour('2024-05-20 12:34:56');
-- 返回结果:'12'
  • MINUTE(): 提取分钟部分。
select minute('2024-05-20 12:34:56');
-- 返回结果:'34'
  • SECOND(): 提取秒数部分。
select second('2024-05-20 12:34:56');
-- 返回结果:'56'

3.2加减运算

DATE_ADD(date,interval expr type)
ADDDATE(date,interval expr type)
DATE_SUB(date,interval expr type)
SUBDATE(date,interval expr type)

  • date是一个datetime或date值
  • expr对date进行加减法的一个表达式字符串
  • type指明表达式expr应该如何展示
    在这里插入图片描述
  • DATE_ADD(date, INTERVAL expr type) 、 ADDDATE(date, INTERVAL expr type): 都用于在日期上执行加法操作。可以根据需要选择使用其中之一。
select date_add('2024-05-20 12:34:56',INTERVAL 1 day);
-- 返回结果:'2024-05-21 12:34:56'
select adddate('2024-05-20 12:34:56',INTERVAL 1 day);
-- 返回结果:'2024-05-21 12:34:56'
  • DATE_SUB(date, INTERVAL expr type) 和 SUBDATE(date, INTERVAL expr type): 都用于在日期上执行减法操作。可以根据需要选择使用其中之一。
select date_sub('2024-05-20 12:34:56',INTERVAL 1 day);
-- 返回结果:'2024-05-19 12:34:56'
select subdate('2024-05-20 12:34:56',INTERVAL 1 day);
-- 返回结果:'2024-05-19 12:34:56'
  • DATEDIFF(date1, date2): 返回两个日期之间的天数差。
select datediff('2024-05-20', '2024-05-10');
-- 返回结果:'10'

3.3格式化日期

  • **DATE_FORMAT(date, format): **根据format字符串格式化date值。
    在format字符串中可用标志符
    年份:
    %Y: 4 位的年份 (例如: 2024)
    %y: 2 位的年份 (例如: 24)
    月份:
    %m: 2 位的月份 (01-12)
    %c: 月份 (1-12)
    %M: 月份名称 (January - December)
    %b: 缩写的月份名称 (Jan - Dec)
    日期:
    %d: 2 位的日期 (01-31)
    %e: 日期 (1-31)
    时间:
    %H: 24 小时制的小时 (00-23)
    %h: 12 小时制的小时 (01-12)
    %I: 12 小时制的小时 (01-12)
    %k: 24 小时制的小时 (0-23)
    %l: 12 小时制的小时 (1-12)
    %i: 分钟 (00-59)
    %s: 秒 (00-59)
    %f: 微秒 (000000-999999)
    %p: AM 或 PM
    其他:
    %w: 一周中的第几天 (0=周日, 1=周一, …, 6=周六)
    %a: 缩写的星期名称 (Sun - Sat)
    %W: 完整的星期名称 (Sunday - Saturday)
    %j: 一年中的第几天 (001-366)
    %T: 24 小时制的时间 (hh:mm:ss)
    %r: 12 小时制的时间 (hh:mm:ss AM/PM)
    %D: 带有英文后缀的日期 (1st, 2nd, 3rd, …)
    这些格式化符号可以组合使用, 以满足不同的日期和时间显示需求。
select date_format('2024-05-20 12:34:56','%Y%M');
-- 返回结果:'2024May'
select date_format('2024-05-20 12:34:56','%Y%m%d');
-- 返回结果:'20240520'

3.4时间戳

  • UNIX_TIMESTAMP(): 返回一个unix时间戳(从’1970-01-01 00:00:00’开始的秒数,date默认值为当前时间)
select unix_timestamp();
-- 返回结果:'1716196161'
  • FROM_UNIXTIME(unix_timestamp): 以’yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回时间戳的值。
select from_unixtime(1716196161);
-- 返回结果:'2024-05-20 17:09:21'

4.转换函数

CAST(expression AS data_type): 用于将某种数据类型的表达式显式转换为另一种数据类型。

  • expression:任何有效的SQServer表达式。
  • AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
  • data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
    可以转换的类型:
  • 二进制,同带binary前缀的效果 : BINARY
  • 字符型,可带参数 : CHAR()
  • 日期 : DATE
  • 时间: TIME
  • 日期时间型 : DATETIME
  • 浮点数 : DECIMAL
  • 整数 : SIGNED
  • 无符号整数 : UNSIGNED
select cast('10.0' AS decimal);
-- 返回结果:'10'

5.逻辑函数:

  • IF(condition, value_if_true, value_if_false): 根据条件返回不同的值。
select ename,sal,if(sal>=3000,'高',if(sal>=1500,'中','低')) 工资级别 from emp;
+--------+------+--------------+
| ename | sal | 工资级别 |
+--------+------+--------------+
| smith | 800 ||
| allen | 1600 ||
| ward | 1250 ||
| jones | 2975 ||
| martin | 1250 ||
| blake | 2850 ||
| clark | 2450 ||
+--------+------+--------------+
  • IFNULL(val, default_val): 如果值为 NULL,则返回默认值。如果不为 NULL 则返回第一个参数的值。
 select ifnull(销量,0) from emp;
+----------------+
| ifnull(销量,0) |
+----------------+
| 0 |
| 123|
| 1000 |
| 0 |
| 500 |
+----------------+
  • CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4…ELSE expr] END: 如果expr1的值为true,则返回expr2的值,如果expr3的值为false,则返回expr4的值…
 select ename,sal,case when sal>=3000 then '高' when sal>=1500 then '中' else '低' end 工资级别  from emp;
+--------+------+--------------+
| ename | sal | 工资级别 |
+--------+------+--------------+
| smith | 800 ||
| allen | 1600 ||
| ward | 1250 ||
| jones | 2975 ||
| martin | 1250 ||
| blake | 2850 ||
| clark | 2450 ||
| scott | 3000 ||
| king | 5000 ||
| turner | 1500 ||
| adams | 1100 ||
| james | 950 ||
| ford | 3000 ||
| miller | 1300 ||
+--------+------+--------------+
  • COALESCE(val1, val2, …): 返回参数列表中第一个非 NULL 值。
select coalesce(NULL,'a',NULL,'c');
-- 返回结果:'a'

6.聚合函数:

聚合函数用于对一组行进行计算并返回单个值作为结果。可以与 GROUP BY 子句结合使用,用于按特定条件对数据进行分组计算。通常用于数据分析和报告中,帮助汇总数据并进行统计计算。
以下是一些常用的 SQL 聚合函数:

  • COUNT(): 统计行数或非 NULL 值的数量。
  • SUM() : 求和。
  • AVG(): 求平均值。
  • MAX() : 求最大值。
  • MIN() : 求最小值。
SELECT COUNT(*) FROM table_name;
SELECT COUNT(column_name) FROM table_name WHERE condition;SELECT SUM(column_name),AVG(column_name),MAX(column_name),MIN(column_name) FROM table_name;
  • GROUP_CANCAT([distinct] str [order by str asc/desc] [separator]): 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
-- 查询每个部门的员工姓名
select deptno,group_concat(name) from emp group by deptno;
+--------+--------------------------------------+
| deptno | name |
+--------+--------------------------------------+
| 10 | clark,king,miller |
| 20 | smith,jones,scott,adams,ford |
| 30 | allen,ward,martin,blake,turner,james |
+--------+--------------------------------------+

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

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

相关文章

RPC 框架

RPC 全称 Remote Procedure Call——远程过程调用。 RPC技术简单说就是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明。RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。 集群和分布式 集群&…

基于Freertos的工训机器人

一. 工训机器人 V1 1. 实物 将自制的F4开发板放置车底板下方,节省上方空间,且能保证布线方便整齐。 2. SW仿真 使用SolidWorks进行仿真,且绘制3D打印件。 工训仿真 3.3D打印爪测试 机械爪测试 二. 工训机器人 V2 1. 实物 工训机器人V2不同于…

国密协议网关与IPSec VPN技术:保障数据安全传输的新途径

国密协议网关IPSec VPN隧道技术是一种结合了国家密码管理局(简称国密)的加密算法和IPSec VPN隧道技术的安全通信解决方案。 IPSec(Internet Protocol Security)是互联网协议安全的一种标准,用于保护网络通信的安全性和…

共筑信创新生态:DolphinDB 与移动云 BC-Linux 完成兼容互认

近日,DolphinDB 数据库软件 V2.0 与中国移动通信集团公司的移动云天元操作系统 BC-Linux 完成兼容性适配认证。经过双方共同严格测试,DolphinDB 性能及稳定性等各项指标表现优异,满足功能及兼容性测试要求。 此次 DolphinDB 成功通过移动云 B…

微服务-Nacos-安装-集成SpringBoot

微服务-SpringCloud-ALibaba-Nacos Nacos 是阿里巴巴推出的 SpringCloud的组件 官网:什么是 Nacos 主要是为了解决微服务的架构中 服务治理的问题服务治理就是进行服务的自动化管理,其核心是服务的注册与发现。 服务注册:服务实例将自身服务信息注册…

使用BigDecimal定义的实体类字段返回给前台的是字符串类型,如何返回数字类型

目录 前言: 问题现象: 解决方法: 效果: 前言: 做项目的时候数据字段通常定义为bigdecimal类型,方便进行运算,但是发现接口调用后返回给前台的是字符串,这篇博文讲的是如何将定义…

1109 擅长C(测试点0,1,2,3)

当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗? ..C.. .C.C. C...C CCCCC C...C C...C C...C CCCC. C...C C...C CCCC. C...C C...C CCCC. .CCC. C...C C.... C.... C.... C...C .CCC. CCCC. C...C C...C C...C C…

【香橙派 AIpro】OrangePi AIpro :教育、机器人、无人机领域的超级AI大脑,华为昇腾处理器驱动的AI开发板新标杆

【OrangePi AIpro:教育、机器人、无人机领域的超级AI大脑,华为昇腾处理器驱动的AI开发板新标杆】 文章目录 一、开箱与初印象1. 初印象2. 上手开机3. 安装和运行 TightVNC 远程桌面3.1. 安装 TightVNC 服务器3.2. 启动 VNC 服务器3.3. 在 Windows 上使用…

Java 字符串处理

Java 是一种广泛使用的编程语言,而字符串处理是 Java 编程中非常重要的一部分。Java 提供了丰富的字符串操作功能,通过 String 类和 StringBuilder、StringBuffer 类来处理字符串。 一、Java 字符串的创建 1. 使用字面量 在 Java 中,字符串…

应急响应-网页篡改-技术操作只指南

初步判断 网页篡改事件区别于其他安全事件地明显特点是:打开网页后会看到明显异常。 业务系统某部分出现异常字词 网页被篡改后,在业务系统某部分网页可能出现异常字词,例如,出现赌博、色情、某些违法APP推广内容等。2019年4月…

Oracle创建用户时提示ORA-65096:公用用户名或角色名无效

Oracle创建用户时提示“ORA-65096:公用用户名或角色名无效” 如下图所示: 解决方法:在新增用户名前面加上C##或者c##就可以解决无效问题,具体什么原因还不清楚,需要再研究一下。

一机实现All in one,NAS如何玩转虚拟机!

常言道,中年男人玩具有三宝 充电器、路由器、NAS 你问我NAS的魔力在哪里? 一机实现All in one洒洒水啦 那NAS又如何玩转虚拟机呢? 跟我来 0基础也能轻松get! NAS如何玩转虚拟机 铁威马NAS的VirtualBox的简单易用,可虚拟的系统包括Win…

python核心编程(二)

python面向对象 一、基本理论二、 面向对象在python中实践2.1 如何去定义类2.2 通过类创建对象2.3 属性相关2.4 方法相关 三、python对象的生命周期,以及周期方法3.1 概念3.2 监听对象的生命周期 四、面向对象的三大特性4.1 封装4.2 继承4.2.1 概念4.2.1 目的4.2.2 分类4.2.3 t…

cgicc开发(文件上传)

//cgicc文件上传封装 void UploadSoftware() {// 初始化CGIC环境Cgicc cgi;// 获取上传的文件file_iterator fileIter cgi.getFile("button_browse"); //from表单中,输入为文件属性(typefile)的name属性值if (fileIter cgi.getFiles().end()){ #if (DEBUG true)co…

软件设计师中级 重点 笔记

文章目录 下午题目网络DNS域名解析分类:域名协议简介网络设备 算法软件工程实体联系图(E-R图) 其它 下午题目 数据流图补充原则 22年下半年真题 更早-真题大全 答题技巧 网络 DNS域名解析分类: 递归查询的顺序:1.本…

电脑重要文件如何加密保护?教你两种方法

加密是保护电脑重要文件的常见方法,可以有效避免文件数据泄露。那么,电脑重要文件该如何加密保护呢?下面小编就来教你两种方法,帮助你解决文件安全问题。 超级加密3000 超级加密3000是一款专业的电脑数据加密软件,可以…

流量被劫持?不怕,轻松Get 防“窃”技巧!

流量劫持是一种恶意行为,攻击者会在用户访问网站时,将其流量重定向到第三方站点上,导致用户访问的不是原始目标站点。这种行为不仅会影响网站的品牌形象,还会导致用户流失和信息泄露等严重后果。本文将探讨网站如何应对流量劫持。…

SurfaceFinger layer创建过程

SurfaceFinger layer创建过程 引言 本篇博客重点分析app创建Surface时候,SurfaceFlinger是如何构建对应的Layer的主要工作有那些! 这里参考的Android源码是Android 13 aosp! app端创建Surface 其核心流程可以分为如下接部分: app使用w,h,fo…

window.location.search取不到值

window.location.search window.location.search没有值的原因: URL中使用了 hash (指URL中带有#符号),导致URL后面携带的参数被location.hash截取走了,你再使用window.location.search得到的就是空值 打印 window.location 其实…

收银系统源码--零售连锁店铺如何选择适合自己的收银系统?

如果你现在还认为小便利店只要简单的收款,只有大型的连锁便利店才需要收银软件和管理软件,那你就错了,连锁品牌的便利店是必须要用到专业的收银软件,但是小微型的便利店更应该要用专门的软件, 在各行各业逐步革新互联网…