根据Concat年,月和日字段查询日期

时间:2013-11-13 09:52:36

标签: mysql etl

我将ETL传递给数据库系统后,我有一个名为“dim_time”的时间维度,该表由许多字段组成,如:

- id
- year
- month
- day
- hour
- week
- day_of_week

我正在尝试从该表中获取一系列ID,在两个日期之间查询它,经过多次测试我认为最好的选项是concat字段并询问<=和{{1} },这是查询:

>=

此查询返回第10个月第9天的行ID,以及第11个月,第1天到第13天的所有日期(查询中的限制)。

为什么第10个月的剩余时间没有结果? 10至31日之间的日子。

我不知道是否遗漏了某些内容,或SELECT `DimTime`.`id` FROM `dim_time` AS `DimTime` WHERE ((CONCAT(`DimTime`.`year`, "-", `DimTime`.`month`, "-", `DimTime`.`day`, " 00:00:00") >= CONCAT(2013, "-", 10, "-", 9, " 00:00:00")) AND (CONCAT(`DimTime`.`year`, "-", `DimTime`.`month`, "-", `DimTime`.`day`, " 00:00:00") <= CONCAT(2013, "-", 11, "-", 13, " 00:00:00"))) ORDER BY `DimTime`.`year` DESC, `DimTime`.`quarter` DESC, `DimTime`.`month` DESC, `DimTime`.`week` DESC, `DimTime`.`day` DESC, `DimTime`.`hour` DESC 无法将MySQL视为日期比较。

1 个答案:

答案 0 :(得分:1)

当您有2013-11-13之类的日期时,它会有效,但是当您的连结日期类似于2013-1-2时,您必须将其投放到日期,因为有效日期为2013-01-02

无论如何,最好的办法是在dim_time表中添加一个包含完整日期的列。特别是因为即使你让它工作,你的查询也无法使用索引。你必须像

一样写
WHERE `DimTime`.`year` >= 2013
AND `DimTime`.`month` >= 10
...

然后可以使用索引。因此,让您的生活更轻松,在表格中添加完整日期列。