【问题标题】:Outputting the name of the month instead of the number输出月份的名称而不是数字
【发布时间】:2011-03-13 01:47:38
【问题描述】:

我有一个查询,它返回 3 个字段,其中一个是两位数的月份。

我想基本上拥有它,所以如果月份 == 1 输出 1 月,如果月份 == 02 输出 2 月等

这是我正在尝试的,但这根本不起作用,并阻止整个列在 PHP 中显示。

            while ($row = mysql_fetch_array($sqlstr)) {
               if ($row['theMonth']=="6") {
                  echo "<td>{June}</td>";}
                  echo "<td>{$row['sumSales']}</td>";
                  echo "<td>{$row['sumPurchases']}</td>";
                  echo "</tr>";
               }
            }

什么是做我想做的事情的正确方法,为什么我做错了什么?

我使用的 SQL 查询是:

SELECT theMonth, sum(Sales) as sumSales, sum(Purchases) as sumPurchases
FROM
 ( SELECT date_format(saledate, '%Y-%m') AS theMonth, sales.cost as Sales, 0 AS Purchases
   FROM sales, products
   WHERE sales.product=products.name AND category='Food' OR category='Bocas' 
                OR category='Bebidas' OR category='Flor de cana por botellas' 
                OR category='Vino por botella' OR category='hora feliz'
  UNION ALL
   SELECT date_format(purchasedate, '%Y-%m') AS theMonth, 0 as Sales, purchases.cost as Purchases
   FROM purchases
 ) AS all_costs
group by theMonth

我不认为我可以替换

SELECT date_format(purchasedate, '%Y-%m') AS theMonth

SELECT MONTHNAME(purchasedate) AS theMonth

那么在 SQL 中以文本形式返回月份名称的最佳方法是什么?

【问题讨论】:

  • 你为什么不认为你可以使用SELECT MONTHNAME(purchasedate)

标签: php sql mysql conditional if-statement


【解决方案1】:

在您的 SQL 中,您可以使用 DATE_FORMAT 将日期转换为月份名称:

SELECT DATE_FORMAT(NOW(), '%M')
七月

可以在 MySQL 文档中找到允许的说明符列表。

MONTHNAME 也应该可以。)

您当前的方法不起作用的原因是因为您当前正在输出年份和月份(例如“2010-06”),并且此字符串与字符串“6”比较不相等。

【讨论】:

    【解决方案2】:

    您在第一个echo 语句的行尾有一个右花括号。这导致 PHP 过早终止条件块,然后当它偶然发现最后一个右花括号时出现解析错误,因为它没有开始匹配。

    您可以使用 date 函数从时间戳(如果有的话)中获取月份的名称。 date('F', $timestamp);see the php date function reference

    在 SQL 语句中执行此操作可能是处理这种特殊情况的最简单和最性能友好的方式。

    【讨论】:

    • 当我编辑问题以将代码格式化为代码时,我错过了右大括号,所以我可能应该为此负责
    【解决方案3】:

    第一个选项是修改您的 SQL 查询以将月份作为名称而不是(或以及)数字返回。见MONTHNAME

    第二种选择是使用 PHP 的日期函数为您生成名称

    $monthName = date('F',mktime(1,1,1,$row['theMonth'],1,2010));
    

    第三种是使用月份名称数组,类似于 zebediah 的建议

    【讨论】:

      【解决方案4】:

      .

      function month_name($int) {
        return date( 'F' , mktime(1, 1, 1, (int)$int, 1) );
      }
      echo month_name(2); // February
      

      【讨论】:

        【解决方案5】:

        可能有一个内置的 php,但没有使用类似的东西

        $monthNames = array(1 => "January", 2 => "Febuary", 3 => "March", .... 12 => "December");
        while ($row = mysql_fetch_array($sqlstr)) {
            echo "<td>{$monthNames[$row['theMonth']]}</td>";
            echo "<td>{$row['sumSales']}</td>";
            echo "<td>{$row['sumPurchases']}</td>";
            echo "</tr>";
        
        }
        

        【讨论】:

        • 假设你的意思是: $monthNames = array(1 => "January", 2 => "Febuary", 3 => "March", .... 12 => "December");
        • facepalm 我查了手册看是不是...但后来忘记了声明。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        相关资源
        最近更新 更多