首页 > 数据库 >Mysql关于时间的一些总结

Mysql关于时间的一些总结

时间:2022-10-11 17:04:53浏览次数:66  
标签:总结 00 01 1997 Mysql 关于 mysql date select


一、mysql获取当月的第一天

获取当前时间
SQL:

SELECT

结果:

2017-12-27

获取当前日期是当月的多少天
SQL:

SELECT DAY

结果:

27

获取当月第一天
SQL:

SELECT DATE_ADD(CURDATE(),INTERVAL - DAY(CURDATE()) + 1 DAY)

结果:

2017-12-01

二、mysql生成一段连续的时间数列

创建辅助表:

CREATE TABLE num (i int);

插入辅助数据:

INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

生成笛卡尔积

SELECT
*
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS

结果:

Mysql关于时间的一些总结_字符串

SELECT
n1.i + n10.i * 10 + n100.i * 100 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS

结果:

Mysql关于时间的一些总结_时间_02


生成时间序列:

SELECT
adddate('2017-09-01', numlist.id) AS `date`
FROM
(
SELECT
n1.i + n10.i * 10 + n100.i * 100 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
) AS numlist
WHERE
adddate('2017-07-01', numlist.id) <= '2017-07-10';

结果:

Mysql关于时间的一些总结_unix_03

三、mysql日期函数

DAYOFWEEK(date)
 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
mysql> select DAYOFWEEK(‘1998-02-03’);
  -> 3
  
WEEKDAY(date)
 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
mysql> select WEEKDAY(‘1997-10-04 22:23:00’);
  -> 5
mysql> select WEEKDAY(‘1997-11-05’);
  -> 2

DAYOFMONTH(date)
 返回date是一月中的第几日(在1到31范围内)
mysql> select DAYOFMONTH(‘1998-02-03’);
  -> 3

DAYOFYEAR(date)
 返回date是一年中的第几日(在1到366范围内)
mysql> select DAYOFYEAR(‘1998-02-03’);
  -> 34

MONTH(date)
 返回date中的月份数值
mysql> select MONTH(‘1998-02-03’);
  -> 2

DAYNAME(date)
 返回date是星期几(按英文名返回)
mysql> select DAYNAME(“1998-02-05”);
  -> ‘Thursday’

MONTHNAME(date)
 返回date是几月(按英文名返回)
mysql> select MONTHNAME(“1998-02-05”);
  -> ‘February’

QUARTER(date)
 返回date是一年的第几个季度
mysql> select QUARTER(‘98-04-01’);
  -> 2

WEEK(date,first)
 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)
mysql> select WEEK(‘1998-02-20’);
  -> 7
mysql> select WEEK(‘1998-02-20’,0);
  -> 7
mysql> select WEEK(‘1998-02-20’,1);
  -> 8

YEAR(date)
 返回date的年份(范围在1000到9999)
mysql> select YEAR(‘98-02-03’);
  -> 1998

HOUR(time)
 返回time的小时数(范围是0到23)
mysql> select HOUR(‘10:05:03’);
  -> 10

MINUTE(time)
 返回time的分钟数(范围是0到59)
mysql> select MINUTE(‘98-02-03 10:05:03’);
  -> 5

SECOND(time)
 返回time的秒数(范围是0到59)
mysql> select SECOND(‘10:05:03’);
  -> 3

PERIOD_ADD(P,N)
 增加N个月到时期P并返回(P的格式YYMM或YYYYMM)
mysql> select PERIOD_ADD(9801,2);
  -> 199803

PERIOD_DIFF(P1,P2)
 返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
mysql> select PERIOD_DIFF(9802,199703);
  -> 11

DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
 对日期时间进行加减法运算
 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数
 date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释
 [type值 含义 期望的expr格式]:
 SECOND 秒 SECONDS
 MINUTE 分钟 MINUTES
 HOUR 时间 HOURS
 DAY 天 DAYS
 MONTH 月 MONTHS
 YEAR 年 YEARS
 MINUTE_SECOND 分钟和秒 “MINUTES:SECONDS”
 HOUR_MINUTE 小时和分钟 “HOURS:MINUTES”
 DAY_HOUR 天和小时 “DAYS HOURS”
 YEAR_MONTH 年和月 “YEARS-MONTHS”
 HOUR_SECOND 小时, 分钟, “HOURS:MINUTES:SECONDS”
 DAY_MINUTE 天, 小时, 分钟 “DAYS HOURS:MINUTES”
 DAY_SECOND 天, 小时, 分钟, 秒 “DAYS HOURS:MINUTES:SECONDS”
 expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
 如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)
mysql> SELECT “1997-12-31 23:59:59” INTERVAL 1 SECOND;
  -> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY “1997-12-31”;
  -> 1998-01-01
mysql> SELECT “1998-01-01” - INTERVAL 1 SECOND;
  -> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD(“1997-12-31 23:59:59”,INTERVAL 1 SECOND);
  -> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD(“1997-12-31 23:59:59”,INTERVAL 1 DAY);
  -> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD(“1997-12-31 23:59:59”,INTERVAL “1:1” MINUTE_SECOND);
  -> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB(“1998-01-01 00:00:00”,INTERVAL “1 1:1:1” DAY_SECOND);
  -> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD(“1998-01-01 00:00:00”, INTERVAL “-1 10” DAY_HOUR);
  -> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB(“1998-01-02”, INTERVAL 31 DAY);
  -> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM “1999-07-02”);
  -> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM “1999-07-02 01:02:03”);
  -> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM “1999-07-02 01:02:03”);
  -> 20102

TO_DAYS(date)
 返回日期date是西元0年至今多少天(不计算1582年以前)
mysql> select TO_DAYS(950501);
  -> 728779
mysql> select TO_DAYS(‘1997-10-07’);
  -> 729669

FROM_DAYS(N)
 给出西元0年至今多少天返回DATE值(不计算1582年以前)
mysql> select FROM_DAYS(729669);
  -> ‘1997-10-07’

DATE_FORMAT(date,format)
 根据format字符串格式化date值
 (在format字符串中可用标志符:
 %M 月名字(January……December)
 %W 星期名字(Sunday……Saturday)
 %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
 %Y 年, 数字, 4 位
 %y 年, 数字, 2 位
 %a 缩写的星期名字(Sun……Sat)
 %d 月份中的天数, 数字(00……31)
 %e 月份中的天数, 数字(0……31)
 %m 月, 数字(01……12)
 %c 月, 数字(1……12)
 %b 缩写的月份名字(Jan……Dec)
 %j 一年中的天数(001……366)
 %H 小时(00……23)
 %k 小时(0……23)
 %h 小时(01……12)
 %I 小时(01……12)
 %l 小时(1……12)
 %i 分钟, 数字(00……59)
 %r 时间,12 小时(hh:mm:ss [AP]M)
 %T 时间,24 小时(hh:mm:ss)
 %S 秒(00……59)
 %s 秒(00……59)
 %p AM或PM
 %w 一个星期中的天数(0=Sunday ……6=Saturday )
 %U 星期(0……52), 这里星期天是星期的第一天
 %u 星期(0……52), 这里星期一是星期的第一天
 %% 字符% )
mysql> select DATE_FORMAT(‘1997-10-04 22:23:00’,’%W %M %Y’);
  -> ‘Saturday October 1997’
mysql> select DATE_FORMAT(‘1997-10-04 22:23:00’,’%H:%i:%s’);
  -> ‘22:23:00’
mysql> select DATE_FORMAT(‘1997-10-04 22:23:00’,’%D %y %a %d %m %b %j’);
  -> ‘4th 97 Sat 04 10 Oct 277’
mysql> select DATE_FORMAT(‘1997-10-04 22:23:00’,’%H %k %I %r %T %S %w’);
  -> ‘22 22 10 10:23:00 PM 22:23:00 00 6’

TIME_FORMAT(time,format)
 和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)

CURDATE()
CURRENT_DATE()
 以’YYYY-MM-DD’或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字)
mysql> select CURDATE();
  -> ‘1997-12-15’
mysql> select CURDATE() 0;
  -> 19971215

CURTIME()
CURRENT_TIME()
 以’HH:MM:SS’或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字)
mysql> select CURTIME();
  -> ‘23:50:26’
mysql> select CURTIME() 0;
  -> 235026

NOW()
SYSDATE()
CURRENT_TIMESTAMP()
 以’YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字)
mysql> select NOW();
  -> ‘1997-12-15 23:50:26’
mysql> select NOW() 0;
  -> 19971215235026

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
 返回一个Unix时间戳(从’1970-01-01 00:00:00’GMT开始的秒数,date默认值为当前时间)
mysql> select UNIX_TIMESTAMP();
  -> 882226357
mysql> select UNIX_TIMESTAMP(‘1997-10-04 22:23:00’);
  -> 875996580

FROM_UNIXTIME(unix_timestamp)
 以’YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字)
mysql> select FROM_UNIXTIME(875996580);
  -> ‘1997-10-04 22:23:00’
mysql> select FROM_UNIXTIME(875996580) 0;
  -> 19971004222300

FROM_UNIXTIME(unix_timestamp,format)
 以format字符串格式返回时间戳的值
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),’%Y %D %M %h:%i:%s %x’);
  -> ‘1997 23rd December 03:43:30 x’

SEC_TO_TIME(seconds)
 以’HH:MM:SS’或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字)
mysql> select SEC_TO_TIME(2378);
  -> ‘00:39:38’
mysql> select SEC_TO_TIME(2378) 0;
  -> 3938

TIME_TO_SEC(time)
 返回time值有多少秒
mysql> select TIME_TO_SEC(‘22:23:00’);
  -> 80580
mysql> select TIME_TO_SEC(‘00:39:38’);
  -> 2378


标签:总结,00,01,1997,Mysql,关于,mysql,date,select
From: https://blog.51cto.com/u_15824687/5747154

相关文章

  • mysql 的连接问题
    --查看mysql的最大连接数showvariableslike'%max_connections%'--查看此时mysql的连接数量showstatuslike'Threads%'--查看mysql的连接的用户的信息s......
  • mysql 以某一列排序加序号
    加序号函数row_number()、rank()和dense_rank()加序号函数over()中必须有orderby排序row_number()row_number()OVER([partitionby...]orderby...)为一个分区中的......
  • 约束-详细总结
    *概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。*分类: 1.主键约束:primarykey 2.非空约束:notnull 3.唯一约束:unique 4.外键约束:fo......
  • mysql 索引
    目录mysql索引索引(Index)是什么为什么要使用索引顺序访问索引访问索引的优缺点优点缺点索引可以分为哪些类型B+tree索引mysql索引索引(Index)是什么索引是一种特殊的数据......
  • 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
    数据库告警、紧急问题处理这些项目对于大多数朋友来讲应该不陌生了。从墨天轮社区整理的“最受DBA欢迎的技术文档合辑”系列中可以发现,大家对“故障诊断专题”的热情居高不......
  • mysql插入时无法插入中文
    我这里使用navicate连接的docker里面的mysql表结构:表的初始内容:增加操作:操作后表的内容:可以发现这里中文的插入产生了报错。出现的原因:默认的字符集编码出现......
  • mysql 获取当前日期、上月同期日期、本月月份、上月月份
     SELECTcurdate();--获取当前日期(yyyy-mm-dd)SELECTDATE_SUB(curdate(),INTERVAL1MONTH)aslastmonth_date;--获取上月同期日期(yyyy-mm-dd)SELECTdate_......
  • 软件项目部署时注意事项及关键点总结
    一、部署之前1.确认目标服务器1.1确认服务器操作系统及版本:Windows、Linux等;1.2确认服务器环境及地址:生产环境、开发环境、测试环境、演示环境等;1.3确认服务器部署......
  • 2.5W字详解 | 专门为 “数据分析师” 写的 “MySQL优化” 问题,真的好懂多了!
    目录  ​​1、MySQL的基本架构​​​   ​​1)MySQL的基础架构图​​   ​​2)查询数据库的引擎​​​   ​​3)指定数据库对象的存储引擎​​​  ​​2、SQL......
  • 带你学MySQL系列 | MySQL数据类型详解
    1.简要概述为什么要开通MySQL这个学习板块呢?因为这是一名数据分析师必要的一项技能。分析数据什么最重要?当然是数据,既然如此!在数据呈现爆发式增长的年代,怎么能够不学学数据......