2023-03-05
温故知新
00
请注意,本文编写于 605 天前,最后修改于 271 天前,其中某些信息可能已经过时。

目录

简介
关键字
临时表dual
分析explain
分页limit
函数
日期格式化DATE_FORMAT
字符串转日期strtodate
随机数RAND
取整ROUND
时间加减adddate
分组聚合group_concat()
数据类型
VARBINARY (存储IP示例)

简介

本文用于记录MySQL中的一些函数或语法。

持续更新中。。。

关键字

临时表dual

dual用于创建虚拟的临时表,保证sql正常执行

sql
select now() from dual;

分析explain

在一条sql的开头使用,用于分析sql的执行情况。

sql
explain select * from dncc_dist where id = 1;

输出:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEdncc_distconstPRIMARYPRIMARY4const1100

分页limit

  • limit N: 返回 N 条记录
  • limit N,M : 相当于 limit M offset N , 从第 N 条记录开始, 返回 M 条记录

函数

日期格式化DATE_FORMAT

DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

  • 语法:DATE_FORMAT(date, format),date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

字符串转日期str_to_date

  • 语法:str_to_date(str,format);format格式必须和str的格式相同,否则返回空

  • 例子:select str_to_date('2017-10-29', '%Y-%m-%d %H:%i:%S')

format可用的格式见上表。

随机数RAND

生成1以内随机数,包含小数点后16位

  • 应用示例:
sql
-- 生成10以内随机数,并取整 select ROUND(RAND() * 10) from dual;

取整ROUND

  • ROUND(X),对数字X取整

  • ROUND(X, N),对数字X取小数点后N位

  • 应用示例:

sql
-- 保留2为小数 select ROUND(10.12345, 2) from dual;

时间加减adddate

对时间类型数据进行加减,通过参数可以指定对时间加减秒、分钟、小时、天等等。

  • 应用示例:
sql
-- 对当前时间增加60分钟 select adddate(SYSDATE(), interval 60 minute) from dual;

分组聚合group_concat()

  • 引用示例
sql
select id, group_concat(score) as scores, group_concat(subject) as subjects from student_score group by id

student_score为学生成绩表,subject为科目名称,score为科目成绩,id为学生id。

此sql表示按学生id分组,将每个学生的科目聚合,成绩聚合。输出结果可能为:

idscoressubjects
178,98,88语文,数学,英语
289,80,94语文,数学,英语

数据类型

VARBINARY (存储IP示例)

VARBINARY 是一种 MySQL 数据库中用于存储可变长度二进制数据的数据类型。它与 VARCHAR 类似,但用于存储二进制数据而不是字符数据。VARBINARY 可以存储任意长度的二进制数据,包括字节、图片、文件等。这种数据类型在存储 IP 地址时非常有用,特别是当处理 IPv6 地址时,因为 IPv6 地址比 IPv4 地址更长。

假设你有一张 log 表,有 ipv 两个字段,分别用于存储IP地址和类型。

  • ip 字段:VARBINARY(16)
  • v 字段:int,4代表IPv4,6代表IPv6。

示例:

sql
-- 插入IPv4数据 insert into iplog(ip,v) value (INET_ATON('192.168.0.1'), 4); -- 查询IPv4数据 select INET_NTOA(ip) from iplog where v = 4; -- 插入IPv6数据 insert into iplog(ip,v) value (INET6_ATON('2409:8a3c:46d:5b70:48e:3882:11dd:3119'), 6); -- 查询IPv6数据 select INET6_NTOA(ip) from iplog where v = 6;
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!