mysql 比较datetime类型

247 阅读1分钟

今天开发时,遇到个小需求“mysql中,比较datetime类型”;

通过相关文章,了解到以下知识点:

  1. datetime类型可以直接比较,无需转成 unix时间戳 或 date 类型再进行比较;
  2. timestamp 类型的的最大值是"2038-01-19 03:14:07",所以 datetime 类型转 timestamp 类型需要注意这个最大值,若大于最大值,则转换成 timestamp 后,值会变为 0;
datetime类型:"2040-01-19 03:14:07"  
转成
timestamp 类型: 0

Invalid DATEDATETIME, or TIMESTAMP values 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 the NO_ZERO_DATE SQL mode are enabled;

  1. now() 返回当前的日期和时间,值如 "2008-11-11 12:45:34";
  2. datetime 类型转 timestamp 类型: unix_timestamp();
unix_timestamp('2024-05-23 23:59:59')

-- member_expired_at是datetime类型
unix_timestamp(member_expired_at)
  1. datetime 类型转 date 类型: CONVERT(datetime类型列名, DATE) or CAST(datetime类型列名 AS DATE)
CONVERT(member_expired_at, DATE)
CAST(member_expired_at AS DATE)
-- 结果均为: '2073-10-11'
  1. 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

参考文档