Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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返回空结果集,如何返回null?_Mysql_Sql - Fatal编程技术网

如果MySQL返回空结果集,如何返回null?

如果MySQL返回空结果集,如何返回null?,mysql,sql,Mysql,Sql,我使用这个脚本 SELECT ti_556, TIME_FORMAT(`waktu_be5b`, '%H:%i') FROM be5b WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY AND waktu_be5b < DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00') limit 1 如果没有与此条件匹配的数据,如何返回null 我尝试使

我使用这个脚本

SELECT ti_556, TIME_FORMAT(`waktu_be5b`, '%H:%i')  
FROM be5b 
WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY  
 AND waktu_be5b <  DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00')
limit 1
如果没有与此条件匹配的数据,如何返回null

我尝试使用COALESCE

 SELECT coalesce(ti_556,null), TIME_FORMAT(`waktu_be5b`, '%H:%i')
 FROM be5b WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY
    AND waktu_be5b <  DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00')
 limit 1
以及输出


MySQL返回一个空结果集,即零行。查询耗时0.0006秒

您需要一个互斥的联合:

SELECT ti_556, TIME_FORMAT(`waktu_be5b`, '%H:%i')  
FROM be5b
WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY
AND waktu_be5b <  DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00') limit 1
UNION
SELECT NULL, NULL
FROM (SELECT 1)
WHERE NOT EXISTS (
    SELECT *
    FROM be5b
    WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY
    AND waktu_be5b <  DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00')
)
只有联合体的一方可以返回数据
.

我不太了解mysql语法,所以这可能不起作用,但应该很接近:

CREATE PROCEDURE myProc()
BEGIN

  SELECT ti_556, TIME_FORMAT(`waktu_be5b`, '%H:%i')  
  INTO temp_table
  FROM be5b
  WHERE waktu_be5b >= DATE_FORMAT(NOW(),'%Y-%m-%d 23:00:00') + INTERVAL -1 DAY
  AND waktu_be5b <  DATE_FORMAT(NOW(),'%Y-%m-%d 01:00:00') LIMIT 1;

  SELECT FOUND_ROWS() INTO num_rows;

  IF(num_rows = 0) THEN
       INSERT INTO temp_table VALUES (NULL,NULL);
  END IF;

  SELECT * FROM temp_table;
END

您可能还想传入自己的参数。

COALESCE只修改返回行中的字段值,如果您的记录集没有行,则它没有任何用处。我甚至不相信mysql可以在Postgres中做你想做的事情。你可以使用一个定制的plpgsql函数来测试你的行数,然后添加一行,如果是0那么,如果没有行,我应该使用什么?我做了一些快速的研究,mysql确实支持存储过程,所以你可以这样做。在这种情况下,我认为你需要检查结果集是否有元组。在PHP mysql_num_中,rows就是用于此的。1064-您的SQL语法中有一个错误;查看与您的MySQL服务器版本对应的手册,了解可在第7行“WHERE NOT EXISTS SELECT*FROM be5b WHERE waktu_be5b=DATE_FO”附近使用的正确语法。您的SQL解决了问题,但非常复杂,如果处理一个查询需要2秒,另一种方法也需要2秒或更长时间,并且处理时间将增加一倍,所以我不推荐使用这种方法