我使用的是MySql,按照标准,它们在数据库中的日期格式为2019/03/31。
在我的程序.net中,csharp我将值读入变量为31/03/2019,因此str_date_format将不起作用,因为它仅接受-而不是/。
不能在where子句中对字符串进行硬编码,而必须将其作为参数读取。
因此,通过阅读手册得出的结论是,我需要在where子句中使用带定界符的date_format
SELECT
DATE_FORMAT(date_time,'%d-%m-%Y'),
AVG(Total),
SUM(Total_ly),
AVG((Total + Total_ly)/2)
FROM transaction
WHERE
date_format(date_time >= @param1 , '%d-%m-%Y')
AND date_format(date_time <= @param2, '%d-%m-%Y')
GROUP BY date_time;
但是它为每一列返回null,并且没有意义,因为没有where子句就可以正常工作。
我更详细地进行了编辑,希望这对您有所帮助, 赞赏任何正确方向的建议!
答案 0 :(得分:3)
我认为您打算将where
子句设为:
where date_time >= '2019-03-22' and
date_time <= '2019-03-24'
请勿将日期转换为字符串以进行比较。
答案 1 :(得分:3)
我猜你实际上是在说:
SELECT
DATE_FORMAT(date_time,'%d-%m-%Y'),
AVG(Total),
SUM(Total_ly),
AVG((Total + Total_ly)/2)
FROM transaction
WHERE
date_time >= STR_TO_DATE('22/03/2019' , '%d/%m/%Y')
AND date_time <= STR_TO_DATE('24/03/2019', '%d/%m/%Y')
GROUP BY date_time;
详细信息:
DATE_FORMAT()
确实可以用于将日期时间转换为预期格式的字符串
STR_TO_DATE()
将字符串转换为日期(给定格式规范);您可以使用它将输入的字符串转换为日期,然后将其与列date_time
进行比较。或者,您可以简单地以正确的格式提供输入日期,即yyyy-mm-dd
答案 2 :(得分:1)
您使用的格式:
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 443
Could not request local forwarding.
不是类似'%d-%m-%Y'
的格式。
但是,即使是这样,
%Y-%m-%d
是错误的,应该写为
date_format(date_time >= "22-03-2019" , '%d-%m-%Y')
您可以通过使用date_format(date_time, '%d-%m-%Y') >= "22-03-2019" -- again not comparable.
将字符串转换为日期来完成所需的操作:
STR_TO_DATE()