我将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
视为日期比较。
答案 0 :(得分:1)
当您有2013-11-13
之类的日期时,它会有效,但是当您的连结日期类似于2013-1-2
时,您必须将其投放到日期,因为有效日期为2013-01-02
。
无论如何,最好的办法是在dim_time表中添加一个包含完整日期的列。特别是因为即使你让它工作,你的查询也无法使用索引。你必须像
一样写WHERE `DimTime`.`year` >= 2013
AND `DimTime`.`month` >= 10
...
然后可以使用索引。因此,让您的生活更轻松,在表格中添加完整日期列。