После того как я передать ETL
в систему базы данных у меня есть измерение времени под названием «dim_time», таблица состоит из многих областях, как:запросов между датами на основе Concat год, месяц и день полей
- id
- year
- month
- day
- hour
- week
- day_of_week
Я пытаюсь получить диапазон идентификаторов из этой таблицы, запрашивая его между 2 датами, после многих испытаний, я думал, что самый лучший вариант был concat
поля и спросить <=
и >=
, это вопрос:
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
Этот запрос r eturns ids строк, которые являются днем 9 месяца 10, и все дни в месяце 11, день 1 до дня 13 (ограничение в запросе).
Почему остальные дни месяца 10 не являются результатом? Дни между 10 - 31.
Я не знаю, пропустил ли я что-то или если MySQL
не может обработать concat
как сравнение даты.
Я думаю, что добавьте полную дату в таблицу, но руководитель разработчиков этого проекта, не хочу этого: S. То почему я теряю время с этим запросом ... Как я могу нарисовать concat к дате? Ok, STR_TO_DATE – ruudy
Вы можете сделать это, выполнив 'CAST (CONCAT (...) AS DATE) AS column_name'. Было бы интересно, почему руководитель проекта этого не хочет. Я работаю уже несколько лет именно в этом бизнесе, работая на ETLs весь день, и я могу просто смотреть facepalm, услышав это. – fancyPants