【问题标题】:mysql - select true when count is greater than zeromysql - 当计数大于零时选择true
【发布时间】:2012-08-09 12:01:06
【问题描述】:

我有以下问题。

SELECT COUNT( * ) AS offer_count
  FROM restaurants_offers
WHERE DATE( NOW( ) ) 
   BETWEEN date_start
   AND date_end
AND restaurant_id =1

现在,当 count 大于零时,我想选择 true else false,而不是 count 作为查询结果。该怎么做?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT case when COUNT(*) > 0 
                then 1
                else 0
           end AS offer_count
    FROM restaurants_offers
    WHERE DATE( NOW( ) ) 
    BETWEEN date_start
    AND date_end
    AND restaurant_id =1
    

    或者如果你需要truefalse的话

    SELECT case when COUNT(*) > 0 
                then 'true'
                else 'false'
           end AS offer_count
    ...
    

    【讨论】:

    • 为什么用例 IF 会更短?
    • 您可以选择其中一个。我更喜欢case。就是这样。
    【解决方案2】:

    试试这个:

    SELECT IF(COUNT(*) > 0, 'true', 'false') AS NewResult
      FROM restaurants_offers
     WHERE (DATE(NOW())  BETWEEN date_start AND date_end) AND 
           restaurant_id = 1
    

    【讨论】:

    • 您可以在 MySQL 中使用未引用的 TRUE/FALSE 值。
    • 如果我不取消引用,它只会返回 1 和 0。
    • 是的,我知道,MySQL 根本没有实现布尔数据类型,SQL 标准也没有指定它是必须的。但它仍然比获取两个字符串值之一('true'/'false')更好,如果在编程语言中检查,这两个值都将评估为 TRUE。
    【解决方案3】:
    SELECT COUNT( * ) > 0 AS has_offers
      FROM restaurants_offers
    WHERE DATE( NOW( ) ) 
       BETWEEN date_start
       AND date_end
    AND restaurant_id =1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多