mysql日期时间年月日星期时分秒分秒厘秒毫秒转换加减

PS C:\Users\Administrator> Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property Caption

Caption
-------
Microsoft Windows 10 专业工作站版

PS C:\Users\Administrator> mysql --version
C:\Program Files\MySQL\MySQL Server 8.1\bin\mysql.exe  Ver 8.1.0 for Win64 on x86_64 (MySQL Community Server - GPL)

1 当前

1.1 当前日期

CURDATE()函数或CURRENT_DATE()函数返回当前日期,输出日期为date类型。

SELECT CURDATE() date
UNION ALL
SELECT CURRENT_DATE() date;
-- +------------+
-- | date       |
-- +------------+
-- | 2023-12-15 |
-- | 2023-12-15 |
-- +------------+

1.2 当前时间

CURTIME()函数或CURRENT_TIME()函数返回当前日期,输出时间为time类型。

SELECT CURTIME(6) time
UNION ALL
SELECT CURRENT_TIME(6) time;
-- +-----------------+
-- | time            |
-- +-----------------+
-- | 11:46:26.086038 |
-- | 11:46:26.086038 |
-- +-----------------+

1.3 当前日期时间

NOW([fsp])函数或CURRENT_TIMESTAMP([fsp])函数返回当前日期时间,接收参数为秒的小数位数fsp,默认值为0,输入范围为0到6之间的整数,输出的类型为datetime类型。

SELECT NOW(6) datetime
UNION ALL
SELECT CURRENT_TIMESTAMP(6) datetime;
-- +----------------------------+
-- | datetime                   |
-- +----------------------------+
-- | 2023-12-15 12:03:06.814963 |
-- | 2023-12-15 12:03:06.814963 |
-- +----------------------------+

2 转换

2.1 日期字符转日期

DATE(expr)函数或STR_TO_DATE(str, format)函数将日期字符串转为日期类型数据,返回当前日期。DATE函数接收参数仅为日期字符串expr,STR_TO_DATE函数接收参数为日期字符串str、日期格式化字符串format,输出的类型为date类型。

SELECT DATE('9999-12-31 23:59:59.999999') date
UNION ALL
SELECT STR_TO_DATE('9999-12-31 23:59:59.999999','%Y-%m-%d') date;
-- +------------+
-- | date       |
-- +------------+
-- | 9999-12-31 |
-- | 9999-12-31 |
-- +------------+

2.2 日期字符转日期时间

STR_TO_DATE(str, format) 函数将日期字符串转为日期时间,返回当前日期时间。当格式化字符串参数format带上时分秒厘秒分秒毫秒等,输出的类型为datetime类型。

SELECT STR_TO_DATE('9999-12-31 23:59:59.999999','%Y-%m-%d %H:%i:%s') datetime
UNION ALL
SELECT STR_TO_DATE('9999-12-31 23:59:59.999999','%Y-%m-%d %H:%i:%s.%f') datetime;
-- +----------------------------+
-- | datetime                   |
-- +----------------------------+
-- | 9999-12-31 23:59:59.000000 |
-- | 9999-12-31 23:59:59.999999 |
-- +----------------------------+

2.3 日期时间转时间戳

UNIX_TIMESTAMP([date]) 函数将日期转换为时间戳,接收参数为日期或日期字符,返回一个数值类型时间戳。
当date∈[1970-01-01 08:00:01.000000, 3001-01-19 07:59:59.999999]时,
UNIX_TIMESTAMP([date])∈[1.000000, 32536771199.999999]。
当date不在[1970-01-01 08:00:01.000000, 3001-01-19 07:59:59.999999]范围内,UNIX_TIMESTAMP([date])=0.000000,
输出值范围为{0.000000}∪[1.000000, 32536771199.999999]

SELECT UNIX_TIMESTAMP('1970-01-01 08:00:00.000000') timestamp
UNION ALL
SELECT UNIX_TIMESTAMP('1970-01-01 08:00:00.999999') timestamp
UNION ALL
SELECT UNIX_TIMESTAMP('1970-01-01 08:00:01.000000') timestamp
UNION ALL
SELECT UNIX_TIMESTAMP('3001-01-19 07:59:59.999999') timestamp
UNION ALL
SELECT UNIX_TIMESTAMP('3001-01-19 08:00:00.000000') timestamp
UNION ALL
SELECT UNIX_TIMESTAMP('9999-12-31 23:59:59.999999') timestamp;
-- +--------------------+
-- | timestamp          |
-- +--------------------+
-- |           0.000000 |
-- |           0.000000 |
-- |           1.000000 |
-- | 32536771199.999999 |
-- |           0.000000 |
-- |           0.000000 |
-- +--------------------+

2.4 时间戳转日期时间

FROM_UNIXTIME(unix_timestamp[,format])函数,必接参数为unix_timestamp,可接参数format,默认值随unix_timestamp的精度变化而变化。
当unix_timestamp∈[0.000000, 32536771199.999999]时,
FROM_UNIXTIME()∈[1970-01-01 08:00:00.000000,3001-01-19 07:59:59.999999]。

SELECT FROM_UNIXTIME(0.000000) datetime
UNION ALL
SELECT FROM_UNIXTIME(32536771199.999999) datetime
UNION ALL
SELECT FROM_UNIXTIME(32536771200.000000) datetime
UNION ALL
SELECT FROM_UNIXTIME(0.999999) datetime
UNION ALL
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('1970-01-01 08:00:00.999999')) datetime;
-- +----------------------------+
-- | datetime                   |
-- +----------------------------+
-- | 1970-01-01 08:00:00.000000 |
-- | 3001-01-19 07:59:59.999999 |
-- | NULL                       |
-- | 1970-01-01 08:00:00.999999 |
-- | 1970-01-01 08:00:00.000000 |
-- +----------------------------+

3 其他

/* 差额 */
SELECT DATEDIFF('3001-01-19 07:59:59.999999','1970-01-01 00:00:00.000000');
-- +--------+
-- | days   |
-- +--------+
-- | 376583 |
-- +--------+
/* 日期加减几个周期 */
SELECT ADDDATE('3001-01-19 07:59:59.999999',interval 0.000001 second) datetime
UNION ALL
SELECT DATE_ADD('3001-01-19 07:59:59.999999',interval 10 minute) datetime
UNION ALL
SELECT DATE_ADD('3001-01-19 07:59:59.999999',interval 10 hour) datetime
UNION ALL
SELECT DATE_ADD('3001-01-19 07:59:59.999999',interval 10 day) datetime
UNION ALL
SELECT DATE_ADD('3001-01-19 07:59:59.999999',interval 10 month) datetime
UNION ALL
SELECT DATE_ADD('3001-01-19 07:59:59.999999',interval 10 year) datetime
UNION ALL
SELECT SUBDATE('3001-01-19 07:59:59.999999',interval 10 day) datetime
UNION ALL
SELECT DATE_SUB('3001-01-19 07:59:59.999999',interval 10 day) datetime;
-- +----------------------------+
-- | datetime                   |
-- +----------------------------+
-- | 3001-01-19 08:00:00        |
-- | 3001-01-19 08:09:59.999999 |
-- | 3001-01-19 17:59:59.999999 |
-- | 3001-01-29 07:59:59.999999 |
-- | 3001-11-19 07:59:59.999999 |
-- | 3011-01-19 07:59:59.999999 |
-- | 3001-01-09 07:59:59.999999 |
-- | 3001-01-09 07:59:59.999999 |
-- +----------------------------+
/* 星期几 */
SELECT WEEKDAY(NOW())+1 weekday;
-- +---------+
-- | weekday |
-- +---------+
-- |       5 |
-- +---------+
/* 日期格式化 */
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%Y')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%m')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%d')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%Y-%m')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%Y-%m-%d')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%H:%i:%s')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%Y-%m-%d %H:%i:%s')
UNION ALL
SELECT DATE_FORMAT('9999-12-31 23:59:59.999999','%Y-%m-%d %H:%i:%s.%f');
-- +------------------------------------------------+
-- | DATE_FORMAT('9999-12-31 23:59:59.999999','%Y') |
-- +------------------------------------------------+
-- | 9999                                           |
-- | 12                                             |
-- | 31                                             |
-- | 9999-12                                        |
-- | 9999-12-31                                     |
-- | 23:59:59                                       |
-- | 9999-12-31 23:59:59                            |
-- | 9999-12-31 23:59:59.999999                     |
-- +------------------------------------------------+
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值