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 |
+--------+--------------------------------------+

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于朴素贝叶斯算法的微博舆情监控系统,flask后端,可视化丰富

背景: 微博作为中国最大的社交媒体平台之一,汇聚了海量用户生成的文本数据,承载着丰富的社会信息和舆论动向。随着互联网的快速发展,人们对于利用这些数据进行舆情分析和预测的需求日益增加。在这种情况下,以Python为…

汽车电子零部件(14):TMS热管理系统

前言: TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要…

遇到了导师放养,该怎么坚持?

最近收到学生读者的留言,抱怨科研的困难。导师忙碌且学生众多,自己只是众多学生之一,常常处于放养状态。除了每周的组会外,几乎无法接触到导师。在这种状态下,缺乏方向和动力,非常担心无法顺利毕业&#xf…

navicat连接过的库忘记密码

1、点击文件->导出连接 2、勾选想要知道密码的库 3、打开导出的文件搜索Password 4、复制Password解密 把下面的php代码复制到在线运行php的网站,替换最下面的decrypt(‘B7246A6E64D4F50A563FA20427A47991’)括号里的内容,然后执行php代码&#xff0…

PHP开发入门

PHP官网:PHP: Hypertext Preprocessor apache官网:https://httpd.apache.org/ 一、搭建PHP环境 下载apache 进入官网点击download 选择下载windows版本文件 点击进入下载界面 点击下载64位版本文件 下载后解压文件 解压文件后进入 D:\httpd-2.4.59-24…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

《TCP/IP网络编程》(第十二章)I/O复用(1)

本章将讨论实现并发服务器的第二种办法,基于I/O复用的服务器端构建。 I/O复用它允许单个进程或线程同时处理多个输入/输出(I/O)操作,而无需为每个I/O操作创建一个独立的线程或进程。这种技术可以显著提高应用程序的效率和性能&…

多模态中的模态有哪些

“多模态”这个名字中的“模态”(modality),指的是不同的数据类型或信息源。在多模态大模型中,常见的模态包括: 文本模态: 包括自然语言文本、语音识别文本等。 图像模态: 指图像数据&#xff…

SEO之核心关键词(二)

初创企业或者需要建站的朋友看以下两篇文章,谢谢支持: 我给不会敲代码又想搭建网站的人建议新手上云 (接上一篇。。。。) 4、查询搜索次数 经过自己及朋友、同事的头脑风暴和检查竞争对手网站之后,再到Google 关键词…

力扣232. 用栈实现队列(两栈实现队列)

Problem: 232. 用栈实现队列 文章目录 题目描述思路Code 题目描述 思路 利用两个栈,一个入栈一个出栈搭配着实现队列的相关操作: 1.创建两个栈stack1和stack2; 2.void push(int x):将要入队的元素先入栈stack1; 3.int pop()&…

Vue3中点击关闭按钮后清除 el-table 表单内容

Vue3中点击关闭按钮后清除 el-table 表单内容 一、前言1、关闭事件2、清除函数实现3、具体代码 一、前言 在 Vue 3 中,通过使用 Element UI 的 el-table 组件来展示表格数据是一种常见的做法。有时候,当用户点击关闭按钮后,我们希望能够清除…

寒冬来了,字节跳动开启裁员新模式。。

大家好,我是白露啊。 不得不说,字节跳动还是真的会搞事啊。 最近一段时间,字节搞出了一个裁员新模式:“细水长流”。这个寓意和“财(裁)源(员)广进”计划差不多了,只不…

Docker安装Nginx 并实现通过nginx部署静态网址

Docker镜像就是一个只读的模板,可以用来创建Docker容器。 例如:一个镜像可以包含一个完整的centos操作系统环境,里面仅安装了mysql、nginx等或用户需要的其他应用程序。 Docker提供了一个非常简单的机制来创建镜像或者更新现有的镜像&#…

马斯克的 xAI 帝国!60亿融资背后的超级布局?

在全球科技竞技场,每个重大融资事件都是对行业格局的一次重塑。近日,埃隆马斯克的人工智能初创企业 xAI 成功完成了一轮规模空前的融资——60亿美元,此举无疑在业界投下了一枚震撼弹,标志着 AI 领域内一场新的竞赛拉开了序幕。 …

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

【Unity程序】Unity游戏开发中常用的设计模式【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

安全性基础知识

安全性基础知识 导航 文章目录 安全性基础知识导航一、网络攻击二、两类密码体制-对称密钥密码体制网络安全内容 三、数字签名与信息摘要四、数字信封五、PKI六、防火墙技术七、入侵检测系统八、计算机病毒九、常见的防病毒软件十、网络安全协议 一、网络攻击 二、两类密码体制…

解读makefile中的.PHONY

在 Makefile 中,.PHONY 是一个特殊的目标,用于声明伪目标(phony target)。伪目标是指并不代表实际构建结果的目标,而是用来触发特定动作或命令的标识。通常情况下,.PHONY 会被用来声明一组需要执行的动作&a…

accelerate在pycham中执行的方法

1. 简介 通常情况下我们在pycharm中默认执行python.exe xxx.py,在命令行中执行accelerate xxx.py。 下面介绍如何在pycharm中执行accelerate的方法,主要目的是便于后续的代码调试。 2. 内容 第一步,运行->编辑配置: 第二步…

GTD时间管理法

Part 1. What is GTD? | 什么是GTD? GTD is a framework that enhances focus and productivity. Through techniques such as capturing all tasks in a trusted system and breaking down complex projects into actionable items, GTD allows individuals to co…