sql中日期函数的基本语法_mysql时间处理规则

来源:这里教程网 时间:2026-02-28 20:38:22 作者:

MySQL 里怎么获取当前日期和时间

MySQL 提供多个函数返回当前时刻,但行为不同,选错会出逻辑 bug。

NOW()
CURRENT_TIMESTAMP()
是等价的,返回带时分秒的
DATETIME
值(如
'2024-05-12 14:23:05'
);
CURDATE()
只返回日期部分(
'2024-05-12'
),
CURTIME()
只返回时间部分(
'14:23:05'
)。

如果字段是
DATE
类型,用
CURDATE()
更安全,避免隐式类型转换
NOW()
在一个语句内多次调用,返回的是同一时间戳(事务内一致),不是实时刷新
注意时区:默认用系统时区,可通过
SELECT @@time_zone;
查看,也可临时设为
'+08:00'

日期加减怎么写才不出错

MySQL 不支持直接用

+
-
对日期做算术运算(比如
date_col + 1
会变成数字加法)。必须用
DATE_ADD()
DATE_SUB()
,或其简写形式
ADDDATE()
/
SUBDATE()

正确写法:
DATE_ADD(NOW(), INTERVAL 7 DAY)
DATE_SUB(order_time, INTERVAL 3 HOUR)
单位要写全小写:
DAY
MONTH
YEAR
HOUR
MINUTE
,不能写成
days
day
(单数复数都错)
DATE
字段加
INTERVAL 1 MONTH
可能跳到不存在的日期(如
'2024-01-31' + 1 MONTH
'2024-02-31'
→ 自动转为
'2024-03-02'
),业务敏感场景需额外校验

如何把字符串转成日期再比较

从日志或前端传入的日期常是字符串(如

'2024/05/12'
'12-May-2024'
),直接跟
DATE
字段比会走字符比较,结果不可靠。必须用
STR_TO_DATE()
显式转换。

格式符必须严格匹配输入:`
STR_TO_DATE('2024/05/12', '%Y/%m/%d')
` ✅,`
STR_TO_DATE('2024/05/12', '%Y-%m-%d')
` ❌(斜杠不等于短横)
常见格式符:
%Y
四位年,
%y
两位年,
%m
01–12,
%c
1–12(无前导零),
%d
01–31,
%e
1–31
转换失败返回
NULL
,建议配合
IS NOT NULL
过滤,否则
WHERE
条件可能漏数据

为什么 WHERE date_col = '2024-05-12' 查不到数据

这是最常见的时间陷阱:当

date_col
DATETIME
TIMESTAMP
类型时,
'2024-05-12'
会被 MySQL 隐式转成
'2024-05-12 00:00:00'
,只能匹配该秒的数据,几乎必然为空。

SELECT * FROM orders 
WHERE order_time >= '2024-05-12' 
  AND order_time < '2024-05-13';
永远优先用范围查询代替等值查询处理日期范围 别依赖
DATE(order_time) = '2024-05-12'
,它会让索引失效(全表扫描)
如果字段是
DATE
类型且确定无时间部分,等值查询才安全

时区、隐式转换、索引失效这三块最容易在线上出问题,改之前最好先

EXPLAIN
看执行计划。

相关推荐