mysql数据库选择两个日期之间的数据,只从日开始,不从月/年开始

ma8fv8wu  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我正在尝试使用存储过程从两个日期之间的数据库中提取数据计数,使用以下代码:

select count(*)
 from SOMT_Development.Board_Metrics_Data bmd
 where bmd.Metric_Year >= startYear and bmd.Metric_Year <= endYear and 
 Metric_Month >= startMonth and Metric_Month <= endMonth and 
 bmd.Metric_Day >= startDay and bmd.Metric_Day <= endDay and 
 bmd.Board_Metrics_ID = 1 and bmd.Value_Colour = "Red" and
 bmd.Date_Created = (select max(bmd2.Date_Created)
                      from SOMT_Development.Board_Metrics_Data bmd2
                      where bmd2.Board_Metrics_ID = bmd.Board_Metrics_ID and
                            bmd2.Metric_Year = bmd.Metric_Year and
                            bmd2.Metric_Month = bmd.Metric_Month and
                            bmd2.Metric_Day = bmd.Metric_Day
                     )) as 'red'

但是,如果月份/年份不同,则无法正常工作。如果我输入2018-3-1和2018-4-4的日期,这就是返回的数据

2018-03-29 09:46:20    green   1   no_comment  2018    3   1
 2018-03-29 09:46:20    red     1   no_comment  2018    3   2
 2018-03-29 09:46:20    white   1   no_comment  2018    3   3
 2018-03-29 09:46:20    white   1   no_comment  2018    3   4
 2018-04-04 13:25:19    green   1   no_comment  2018    4   4
 2018-04-02 13:25:30    green   1   no_comment  2018    4   2
 2018-04-03 13:25:47    green   1   no_comment  2018    4   3

如你所见,这几天并不是一直到月底,而是一直到第四天。
谢谢

wmtdaxz3

wmtdaxz31#

正如@niyou所说,你将遇到单独比较一个日期的部分的问题,所以你需要把它们组合成一个完整的日期。所以试着替换

bmd.Metric_Year >= startYear and bmd.Metric_Year <= endYear and 
 Metric_Month >= startMonth and Metric_Month <= endMonth and 
 bmd.Metric_Day >= startDay and bmd.Metric_Day <= endDay

STR_TO_DATE(CONCAT_WS('-', bmd.Metric_Year, bmd.Metric_Month, bmd.Metric_Day), '%Y-%c-%e') >= STR_TO_DATE(CONCAT_WS('-', startYear, startMonth, startDay), '%Y-%c-%e') AND
STR_TO_DATE(CONCAT_WS('-', bmd.Metric_Year, bmd.Metric_Month, bmd.Metric_Day), '%Y-%c-%e') <= STR_TO_DATE(CONCAT_WS('-', endYear, endMonth, endDay), '%Y-%c-%e')

根据数据库中值的格式,可能需要更改 %Y-%c-%e 格式字符串匹配,手册将帮助选择正确的字符串。

相关问题