3

我的数据库中有一个包含两列的表:月(1-12)和年(yyyy)。

例如,我需要选择两个日期之间的记录

select * from Calendar a where SOMEDATE between STARTDATE and ENDDATE.

所以问题是:如何从我拥有的这两列中创建 STARTDATE 和 ENDDATE?

4

2 回答 2

1
...where SOMEDATE between 
STR_TO_DATE(CONCAT_WS('-',STARTYEAR,STARTMONTH,1),'%Y-%m-%d')
and
DATE_SUB(
    STR_TO_DATE(CONCAT_WS('-',ENDYEAR,ENDMONTH + 1,1),'%Y-%m-%d')
    , INTERVAL DAY 1
)

请注意,我们将这两个部分都转换为日期类型,并用于date_sub从 中减去一天ENDMONTH + 1,因为我们不知道相关月份有多少天。

于 2012-09-20T10:30:10.037 回答
0

您可以使用此解决方案从yearmonth字段中生成日期-

SELECT MAKEDATE(year, 1) + INTERVAL month - 1 MONTH FROM calendar;

将此应用于 WHERE 条件,例如 -

SELECT * FROM Calendar a
WHERE
  MAKEDATE(year, 1) + INTERVAL month - 1 MONTH BETWEEN
    @STARDATE - INTERVAL EXTRACT(DAY FROM @STARDATE) - 1 DAY
    AND
    @ENDDATE

但我必须向您询问 STARTDATE 和 ENDDATE 标准。如果 STARTDATE 是 '2012-09-20' 怎么办?查询是否应该返回月份 = 9 的记录?

于 2012-09-20T10:20:20.420 回答