MySQL-如何选择日期时间字段不等于0000-00-00 00:00:00的行?

时间:2019-03-09 09:09:09

标签: mysql

这是我的表格“ tb_posts”:

enter image description here

我只想选择日期时间字段(即post_date_published)不等于0000-00-00 00:00:00的那些行。我正在使用以下查询,但不起作用:

SELECT * FROM `tb_posts` WHERE `post_date_published` IS NOT NULL

我得到与上图相同的输出。

为什么IS NOT NULL不起作用?

2 个答案:

答案 0 :(得分:1)

根据MYSQL documentation,它将无效日期保存为“ 0000-00-00 00:00:00”。它不会被视为NULL。

尝试与日期“ 0000-00-00 00:00:00 ”进行比较:

SELECT * FROM tb_posts where post_date_published != '0000-00-00 00:00:00'

答案 1 :(得分:1)

我用于这种事情的一种方法是

SELECT `columns` FROM `tb_posts` WHERE UNIX_TIMESTAMP(`post_date_published`) > 0

来自MySQL Documentation

  

参数值的有效范围与TIMESTAMP的范围相同   数据类型:“ 1970-01-01 00:00:01.000000” UTC为“ 2038-01-19”   03:14:07.999999'UTC。 如果您将超期日期传递给   UNIX_TIMESTAMP(),它返回0

UNIX_TIMESTAMP函数将结果强制为整数,因此在这些快速比较中使用起来要容易得多。这对于在不允许使用“空”(即零值)日期/时间列的 MySQL 5.7 中也至关重要。

我很难过,试图将各种日期列转换为NULL,因为MySQL 5.7+不能将0000-00-00 00:00:00识别为有效的比较-所以我将其转换为Unix时间戳,以便比较时间戳而不是实际的[无效] 日期

相关问题