簡體   English   中英

為什么查詢不返回結果以及如何在銷售欄中添加千位分隔符

[英]Why query not returning result and how to add thousand separator in sales column

我正在嘗試從此查詢中檢索結果,但未獲取任何記錄:

SELECT DATE_FORMAT(BILLDATE,'%M-%Y'), SUM(GROSSAMOUNT), SUM(NETAMOUNT)
FROM BILLDETAILS
WHERE DATE_FORMAT(BILLDATE,'%M-%Y') BETWEEN 'May-2011' AND 'Jul-2011'
GROUP BY MONTH(BILLDATE), YEAR(BILLDATE)
ORDER BY YEAR(BILLDATE) DESC, MONTH(BILLDATE);

我還想將SUM(GrossAmount)和Sum(NetAmount)顯示為例如1,10,20,356

您的查詢正在進行字符串比較,而不是日期比較。 嘗試這樣的事情:

SELECT DATE_FORMAT(BILLDATE,'%M-%Y'), SUM(GROSSAMOUNT), SUM(NETAMOUNT)
FROM BILLDETAILS
WHERE BILLDATE BETWEEN '2011-05-01' AND '2011-07-01'
GROUP BY MONTH(BILLDATE), YEAR(BILLDATE)
ORDER BY YEAR(BILLDATE) DESC, MONTH(BILLDATE);

有多種方法可以在WHERE子句中指定日期。 看一下日期和時間函數參考。 例:

...
WHERE BILLDATE BETWEEN '2011-05-01' AND '2011-05-01' + INTERVAL 2 MONTH
...

您可能會發現STR_TO_DATE函數對於將字符串轉換為日期很有用:

SELECT STR_TO_DATE('May-2011', '%M-%Y');
+----------------------------------+
| STR_TO_DATE('May-2011', '%M-%Y') |
+----------------------------------+
| 2011-05-00                       |
+----------------------------------+

因此,您的WHERE子句可以是:

WHERE BILLDATE BETWEEN STR_TO_DATE('May-2011', '%M-%Y')
                   AND STR_TO_DATE('Jul-2011', '%M-%Y')

要格式化該值,請使用FORMAT()函數:

SELECT FORMAT('11020356', 0);
+-----------------------+
| FORMAT('11020356', 0) |
+-----------------------+
| 11,020,356            |
+-----------------------+

...盡管格式化通常最好留給應用程序。 如果在MySQL中對其進行格式化,則在應用程序中對其進行處理可能會變得有些棘手。

SELECT DATE_FORMAT(BILLDATE,'%M-%Y'), SUM(GROSSAMOUNT), SUM(NETAMOUNT)
FROM BILLDETAILS
where billdate between '2011-05-01' and '2011-07-31'
GROUP BY MONTH(BILLDATE);

如果您要在同一年的3個月內查找記錄,則不需要year()函數。

您也可以看一下format()函數

您的問題是您在WHERE中將日期作為字符串進行比較。 如果您不能在那里使用日期(為什么?),則必須至少以yyyymm的方式格式化日期,即以yyyymm格式:

WHERE DATE_FORMAT(BILLDATE,'%Y%m') BETWEEN '201105' AND '201107'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM