我使用这个脚本
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秒)
答案 0 :(得分:0)
你需要一个互相排斥的联盟:
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')
)
联盟中只有一方可以返回数据
答案 1 :(得分:0)
我对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
你可能也希望传递你自己的args。