【问题标题】:Create Date from two cols in mySql从 mySql 中的两列创建日期
【发布时间】:2012-09-12 16:26:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 所以没有日期信息?
  • 不,没有这个信息。没必要。
  • 如果你没有提供日期,你就没有比较日期。而且我不明白为什么您将需要合并比较的两个数据存储在单独的字段中。最好的方法是将数字 mmYYYY 存储在同一字段中,并且不比较日期,比较给定的数字
  • 好的。想象一天总是 01。在这种情况下,我不关心天,因为唯一相关的是月份和年份。为什么我需要存储不必要的信息?

标签: mysql sql date


【解决方案1】:

您可以使用此解决方案从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 的记录?

【讨论】:

    【解决方案2】:
    ...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 中减去一天,因为我们不知道相关月份有多少天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2019-08-05
      • 2011-04-26
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      相关资源
      最近更新 更多