今天开发时,遇到个小需求“mysql中,比较datetime类型”;
通过相关文章,了解到以下知识点:
- datetime类型可以直接比较,无需转成 unix时间戳 或 date 类型再进行比较;
- timestamp 类型的的最大值是"2038-01-19 03:14:07",所以 datetime 类型转 timestamp 类型需要注意这个最大值,若大于最大值,则转换成 timestamp 后,值会变为 0;
datetime类型:"2040-01-19 03:14:07"
转成
timestamp 类型: 0
Invalid
DATE,DATETIME, orTIMESTAMPvalues are converted to the “zero” value of the appropriate type ('0000-00-00'or'0000-00-00 00:00:00'), if the SQL mode permits this conversion. The precise behavior depends on which if any of strict SQL mode and theNO_ZERO_DATESQL mode are enabled;
now()返回当前的日期和时间,值如 "2008-11-11 12:45:34";- datetime 类型转 timestamp 类型: unix_timestamp();
unix_timestamp('2024-05-23 23:59:59')
-- member_expired_at是datetime类型
unix_timestamp(member_expired_at)
- datetime 类型转 date 类型: CONVERT(datetime类型列名, DATE) or CAST(datetime类型列名 AS DATE)
CONVERT(member_expired_at, DATE)
CAST(member_expired_at AS DATE)
-- 结果均为: '2073-10-11'
- datetime类型:取某个时间范围
member_expired_at BETWEEN '2023-01-01 00:00:00' and '2024-12-31 23:59:59'
最终实操
-- member_expired_at 是datetime类型
UPDATE table_user
SET operator='jenny', is_member=0
WHERE CAST(now() AS DATETIME) >= member_expired_at
参考文档
- MySQL:dev.mysql.com/doc/refman/…
- mysql中datetime比较大小问题:www.jianshu.com/p/479674d10…