如果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秒或更长时间,并且处理时间将增加一倍,所以我不推荐使用这种方法