当前位置: 首页 > news >正文

MySQL 的 datetime等日期和时间处理SQL函数及格式化显示

MySQL 的 datetime等日期和时间处理SQL函数及格式化显示

MySQL 时间相关的SQL函数:

  1. MySQL的SQL DATE_FORMAT函数:

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

DATE_FORMAT(date, format) 根据格式串 format 格式化日期或日期和时间值 date,返回结果串。

可用使用 DATE_FORMAT() 来格式化 DATE、DATETIME、TIMESTAMP的值以期望的格式进行显示。

DATE_FORMAT 支持的格式如下:

%S,%s:两位数字形式的秒(00~59)

%i:两位数字形式的分(00~59)

%H:两位数字形式的小时,24小时制(00~23)

%h, %I:两位数字形式的小时,12小时制(01~12)

%k:数字形式的小时,24小时制(0,1,...,23)

%l:数字形式的小时,12小时(1,2,...,12)

%T:24小时的时间形式(hh:mm:ss)

%r:12小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)

%p:AM 或P M

%W:一周中每一天的名称(Sunday,Monday,...,Saturday)

%a:一周中每一天名称的缩写(Sun,Mon,...,Sat)

%d:两位数字表示月中的天数(00,01,...,31)

%e:数字形式表示月中的天数(1,2,...,31)

%D:英文后缀表示月中的天数(1st,2nd,3rd,...)

%w:以数字形式表示周中的天数(0=Sunday,1=Monday,...,6=Saturday)

%j:以三位数字表示年中的天数(001,002,...,366)

%U:周(0,1,...,52),其中Sunday为周中的第一天

%u:周(0,1,...,52),其中Monday为周中的第一天

%M:月(January,February,...,December)

%b:缩写的月(Jan,Feb,...,Dec)

%m:两位数字表示的月份(01,02,...,12)

%c:数字表示的月份(1,2,...,12)

%Y:四位数字表示的年份(2023)

%y:两位数字表示的年份(23)

%%:直接值“%”

测试:

select date_format(current_timestamp(), '%Y-%m-%d %H:%i:%s.%f'); -- 不指定精度、默认精确到秒

select date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒

select date_format(now(), '%Y-%m-%d %H:%i:%s.%f'); -- 不指定精度、默认精确到秒

select date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒

mysql> select date_format(current_timestamp(), '%Y-%m-%d %H:%i:%s.%f'); -- 不指定精度、默认精确到秒

+----------------------------------------------------------+

| date_format(current_timestamp(), '%Y-%m-%d %H:%i:%s.%f') |

+----------------------------------------------------------+

| 2023-02-14 10:40:38.000000 |

+----------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒

+-----------------------------------------------------------+

| date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f') |

+-----------------------------------------------------------+

| 2023-02-14 10:40:52.119296 |

+-----------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select date_format(now(), '%Y-%m-%d %H:%i:%s.%f'); -- 不指定精度、默认精确到秒

+--------------------------------------------+

| date_format(now(), '%Y-%m-%d %H:%i:%s.%f') |

+--------------------------------------------+

| 2023-02-14 10:40:56.000000 |

+--------------------------------------------+

1 row in set (0.00 sec)

mysql> select date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒

+---------------------------------------------+

| date_format(now(6), '%Y-%m-%d %H:%i:%s.%f') |

+---------------------------------------------+

| 2023-02-14 10:41:00.558442 |

+---------------------------------------------+

1 row in set (0.00 sec)

mysql> select date_format(DATE_ADD(now(6), INTERVAL 2 DAY), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒,日期+2天

+-----------------------------------------------------------------------+

| date_format(DATE_ADD(now(6), INTERVAL 2 DAY), '%Y-%m-%d %H:%i:%s.%f') |

+-----------------------------------------------------------------------+

| 2023-02-16 10:41:08.324454 |

+-----------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select date_format(DATE_SUB(now(6), INTERVAL 2 DAY), '%Y-%m-%d %H:%i:%s.%f'); -- 指定精度到最大精度微秒,日期-2天

+-----------------------------------------------------------------------+

| date_format(DATE_SUB(now(6), INTERVAL 2 DAY), '%Y-%m-%d %H:%i:%s.%f') |

+-----------------------------------------------------------------------+

| 2023-02-12 10:41:15.232208 |

+-----------------------------------------------------------------------+

1 row in set (0.00 sec)

SQL插入datetime类型的数据到数据表中:

test01的表结构:

mysql> show create table test01;

+-----------+---------------------------------------------------+

| Table | Create Table |

+-----------+---------------------------------------------------+

| test01 | CREATE TABLE `test01` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`c_datetime` datetime DEFAULT NULL,

`c_timestamp` timestamp NULL DEFAULT NULL,

`c_datetime6` datetime(6) DEFAULT NULL,

`c_datetime3` datetime(3) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 |

+-----------+---------------------------------------------------+

1 row in set (0.00 sec)

插入数据:

mysql> insert into test01(id,c_datetime,c_timestamp,c_datetime6,c_datetime3) values (

7,

date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(current_timestamp(6), '%Y-%m-%d %H:%i:%s.%f'));

mysql> insert into test01(id,c_datetime,c_timestamp,c_datetime6,c_datetime3) values (

8,

date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'),

date_format(now(6), '%Y-%m-%d %H:%i:%s.%f'));

mysql> insert into test01(id,c_datetime,c_timestamp,c_datetime6,c_datetime3) values (

9,

'2023-01-01 15:59:30.123456',

'2023-01-01 15:59:30.123456',

'2023-01-01 15:59:30.123456',

'2023-01-01 15:59:30.123456');

mysql> insert into test01(id,c_datetime,c_timestamp,c_datetime6,c_datetime3) values (

10,

now(6),

now(6),

now(6),

current_timestamp(6));

mysql> select * from test01;

+----+---------------------+---------------------+----------------------------+-------------------------+

| id | c_datetime | c_timestamp | c_datetime6 | c_datetime3 |

+----+---------------------+---------------------+----------------------------+-------------------------+

| 1 | 2023-02-02 09:10:11 | NULL | NULL | NULL |

| 2 | 2023-02-02 09:10:15 | NULL | NULL | NULL |

| 3 | 2038-01-01 15:00:01 | 2038-01-01 15:00:01 | NULL | NULL |

| 4 | 2038-01-05 15:00:01 | 2038-01-05 15:00:01 | NULL | NULL |

| 5 | 2038-01-30 15:00:01 | NULL | NULL | NULL |

| 6 | 9999-01-01 15:00:01 | NULL | 9999-01-01 15:00:01.111222 | 9999-01-01 15:00:01.111 |

| 7 | 2023-02-14 09:31:14 | 2023-02-14 09:31:14 | 2023-02-14 09:31:13.946331 | 2023-02-14 09:31:13.946 |

| 8 | 2023-02-14 10:47:47 | 2023-02-14 10:47:47 | 2023-02-14 10:47:47.168735 | 2023-02-14 10:47:47.169 |

| 9 | 2023-01-01 15:59:30 | 2023-01-01 15:59:30 | 2023-01-01 15:59:30.123456 | 2023-01-01 15:59:30.123 |

| 10 | 2023-02-14 10:58:13 | 2023-02-14 10:58:13 | 2023-02-14 10:58:13.141804 | 2023-02-14 10:58:13.142 |

+----+---------------------+---------------------+----------------------------+-------------------------+

10 rows in set (0.06 sec)

mysql> select id,date_format(c_datetime6, '%Y-%m-%d %H:%i:%s') from test01;

+----+-----------------------------------------------+

| id | date_format(c_datetime6, '%Y-%m-%d %H:%i:%s') |

+----+-----------------------------------------------+

| 1 | NULL |

| 2 | NULL |

| 3 | NULL |

| 4 | NULL |

| 5 | NULL |

| 6 | 9999-01-01 15:00:01 |

| 7 | 2023-02-14 09:31:13 |

| 8 | 2023-02-14 10:47:47 |

| 9 | 2023-01-01 15:59:30 |

| 10 | 2023-02-14 10:58:13 |

+----+-----------------------------------------------+

10 rows in set (0.00 sec)

mysql> select id,date(c_datetime6) from test01;

+----+-------------------+

| id | date(c_datetime6) |

+----+-------------------+

| 1 | NULL |

| 2 | NULL |

| 3 | NULL |

| 4 | NULL |

| 5 | NULL |

| 6 | 9999-01-01 |

| 7 | 2023-02-14 |

| 8 | 2023-02-14 |

| 9 | 2023-01-01 |

| 10 | 2023-02-14 |

+----+-------------------+

10 rows in set (0.01 sec)

mysql> select id,datediff(c_datetime6, '2020-01-01') from test01;

+----+-------------------------------------+

| id | datediff(c_datetime6, '2020-01-01') |

+----+-------------------------------------+

| 1 | NULL |

| 2 | NULL |

| 3 | NULL |

| 4 | NULL |

| 5 | NULL |

| 6 | 2914270 |

| 7 | 1140 |

| 8 | 1140 |

| 9 | 1096 |

| 10 | 1140 |

+----+-------------------------------------+

10 rows in set (0.00 sec)

  1. MySQL的SQL Date函数

NOW():返回当前的日期和时间

CURDATE():返回当前的日期

CURTIME():返回当前的时间

DATE():提取日期或日期/时间表达式的日期部分

EXTRACT():返回日期/时间按的单独部分

DATE_ADD():给日期添加指定的时间间隔

DATE_SUB():从日期减去指定的时间间隔

DATEDIFF():返回两个日期之间的天数

DATE_FORMAT():用不同的格式显示日期/时间

  1. MySQL的SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

YEAR - 格式 YYYY 或 YY

DATETIME和TIMESTAMP如果要精确到毫秒或微妙,需要指定精度,例如:DATETIME(6)、TIMESTAMP(6)

http://www.lryc.cn/news/5994.html

相关文章:

  • 基于微信云开发的防诈反诈宣传教育答题小程序
  • Map和Set
  • 【位运算问题】Leetcode 136、137、260问题详解及代码实现
  • 同花顺2023届春招内推
  • 深入Kafka核心设计与实践原理读书笔记第三章消费者
  • IDEA 中使用 Git 图文教程详解
  • 【Linux系统】进程概念
  • 上课睡觉(2023寒假每日一题 4)
  • 【Selenium学习】Selenium 中常用的基本方法
  • python练习——简化路径
  • 2023新华为OD机试题 - 火星文计算2(JavaScript) | 刷完必过
  • 前端插件重磅来袭
  • 深入工厂|高精密多层板是如何被智造出来的?
  • 代理模式动态代理
  • Mysql之二进制日志
  • kail工具的使用--- cewl
  • 【蓝桥杯集训1】前缀和专题(2 / 5)
  • 基于模块联邦的微前端实现方案
  • 【单目标优化算法】食肉植物优化算法(Matlab代码实现)
  • ANTLR4入门学习(四)
  • Android okhttp3中发送websocket消息,并通过mockwebserver将一个安卓设备模拟成服务器接发消息
  • MySQL系统变量和自定义变量
  • 基于Python来爬取某音动态壁纸,桌面更香了!
  • [数据库]表的约束
  • VisualGDB 5.6R9 FOR WINDOWS
  • Yolov8的多目标跟踪实现
  • 28--Django-后端开发-drf之自定义全局异常、接口文档生成以及三大认证源码分析
  • 【MyBatis】动态SQL
  • LeetCode(剑指offer) Day1
  • 1、MyBatis框架——JDBC代码回顾与分析、lombok插件的安装与使用