[英]Why query not returning result and how to add thousand separator in sales column
I am trying to retrieve results from this query, but it is not fetching any record: 我正在尝试从此查询中检索结果,但未获取任何记录:
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);
I also want to display SUM(GrossAmount) and Sum(NetAmount) as, for example, 1,10,20,356 我还想将SUM(GrossAmount)和Sum(NetAmount)显示为例如1,10,20,356
Your query is doing a string comparison, not a date comparison. 您的查询正在进行字符串比较,而不是日期比较。 Try something like this instead:
尝试这样的事情:
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);
There are a variety of ways to specify the dates in the WHERE clause. 有多种方法可以在WHERE子句中指定日期。 Have a look at the Date and Time Functions reference for alterntives.
看一下日期和时间函数参考。 Example:
例:
...
WHERE BILLDATE BETWEEN '2011-05-01' AND '2011-05-01' + INTERVAL 2 MONTH
...
You may find the STR_TO_DATE function useful for converting strings to dates: 您可能会发现STR_TO_DATE函数对于将字符串转换为日期很有用:
SELECT STR_TO_DATE('May-2011', '%M-%Y');
+----------------------------------+
| STR_TO_DATE('May-2011', '%M-%Y') |
+----------------------------------+
| 2011-05-00 |
+----------------------------------+
So your WHERE
clause could be: 因此,您的
WHERE
子句可以是:
WHERE BILLDATE BETWEEN STR_TO_DATE('May-2011', '%M-%Y')
AND STR_TO_DATE('Jul-2011', '%M-%Y')
To format the value, use the FORMAT() function: 要格式化该值,请使用FORMAT()函数:
SELECT FORMAT('11020356', 0);
+-----------------------+
| FORMAT('11020356', 0) |
+-----------------------+
| 11,020,356 |
+-----------------------+
...although formatting is usually best left to the application. ...尽管格式化通常最好留给应用程序。 If you format it in MySQL, processing it in the application might become a bit tricky.
如果在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);
if you're looking for records within 3 months in the same year you don't need year() function. 如果您要在同一年的3个月内查找记录,则不需要year()函数。
You can also take a look at format() function 您也可以看一下format()函数
Your problem is that you compare dates as strings in WHERE
. 您的问题是您在
WHERE
中将日期作为字符串进行比较。 If you can't use dates there (why?) you have to format the dates at least the way which works, ie in yyyymm
format: 如果您不能在那里使用日期(为什么?),则必须至少以
yyyymm
的方式格式化日期,即以yyyymm
格式:
WHERE DATE_FORMAT(BILLDATE,'%Y%m') BETWEEN '201105' AND '201107'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.