Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查MySql datetime是否为空的更好方法_Mysql_Sql_Datetime - Fatal编程技术网

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

检查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;

我有一个表,其中有一个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;
vs


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

只是为了查看行是否已被软删除而必须传入默认的日期时间字符串,这似乎很笨拙。我去查一下电话。
SELECT * FROM unicorn WHERE status_id = 1 AND deleted_at = '0000-00-00 00:00:00';