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

时间:2013-11-21 05:24:09

标签: 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?

我尝试使用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秒)

2 个答案:

答案 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。