检查MySql datetime是否为null的更好方法

时间:2013-12-06 00:16:09

标签: mysql sql datetime

我有一个带有deleted_at datetime列的表,其默认值为'0000-00-00 00:00:00'。我发出一个查询来检查尚未删除的行(具有上述默认值)。而不是通过where子句传递该字符串构造,是否有更好的方法?

我有以下工作,但想看看是否有更好的东西:

SELECT *, (IF(CAST(deleted_at AS time) IS NULL, 0, 1)) AS deleted FROM unicorn WHERE status_id = 1 HAVING deleted = 0;

VS

SELECT * FROM unicorn WHERE status_id = 1 AND deleted_at = '0000-00-00 00:00:00';

1 个答案:

答案 0 :(得分:0)

如果第二种方式有效(我想不出任何理由,那么我就不会这样做)。当你CAST你的专栏时,MySQL必须首先转换它才能运行你的查询,这涉及到开销。第二个包含要匹配的实际字符串。尝试在EXPLAIN查询中运行SELECT,您应该会看到差异。