从mySql中的两个cols创建日期

时间:2012-09-20 10:06:43

标签: mysql sql date

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

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

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

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

2 个答案:

答案 0 :(得分: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_subENDMONTH + 1中减去一天,因为我们不知道相关月份中有多少天。

答案 1 :(得分: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的记录?