检查MySql datetime是否为空的更好方法
我有一个表,其中有一个deleted_at datetime列,默认值为“0000-00-00:00:00”。我发出一个查询来检查尚未删除的行(具有前面提到的默认值)。有没有更好的方法通过where子句传递字符串构造 我做了以下工作,但想看看是否有更好的方法:检查MySql datetime是否为空的更好方法,mysql,sql,datetime,Mysql,Sql,Datetime,我有一个表,其中有一个deleted_at datetime列,默认值为“0000-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;
SELECT *, (IF(CAST(deleted_at AS time) IS NULL, 0, 1)) AS deleted FROM unicorn WHERE status_id = 1 HAVING deleted = 0;
vs
如果第二种方法有效(我想不出任何不可行的理由),那么我会同意。当您
CAST
您的列时,MySQL必须先转换它,然后才能运行您的查询,这涉及开销。第二个包含要匹配的实际字符串。尝试在SELECT
查询上运行EXPLAIN
,您应该会看到差异。只是为了查看行是否已被软删除而必须传入默认的日期时间字符串,这似乎很笨拙。我去查一下电话。
SELECT * FROM unicorn WHERE status_id = 1 AND deleted_at = '0000-00-00 00:00:00';