Я пытаюсь запросить базу данных с двумя датами … Проблема заключается в том, что столбец, который я запрашиваю, содержит даты, которые в настоящее время отформатированы как «01/01/2014» (дд / мм / гггг) с колонкой тип VARCHAR.
На данный момент я не могу преобразовать столбец в тип даты.
В основном, когда я запрашиваю таблицу, потому что она не установлена в тип даты, между запросом не возвращаются правильные строки …
Кто-нибудь еще сталкивается с этой проблемой, есть ли что-то, что я могу изменить в запросе?
$this->db->where('IssueDate >=', '02/12/2013'); $this->db->where('IssueDate <=', '22/01/2014'); $query = $this->db->get('MYTABLE');
Спасибо, парни.
Решение состоит в использовании str_to_date()
:
$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=", "'2013-12-92'"); $this->db->where("str_to_date(IssueDate, '%d/%m/%Y') <=", "'2014-01-22'"); $
У вас может не быть никакого контроля над базой данных. Но у вас есть контроль над своими собственными константами. Вы должны привыкнуть к стандарту ISO YYYY-MM-DD для таких констант – однозначно и правильно приниматься большинством баз данных.
Я мог бы предложить создать представление в таблице в базе данных, которая преобразует столбцы строки даты, которые у вас есть, в следующем формате … YYYYMMDD
Этот формат является сортируемым и его можно легко сравнивать по сравнению с другими аналогичными датами в формате – вы можете даже провести с ним арифметику дат.
Имейте в виду, что представление не копирует таблицу или не добавляет никаких служебных накладных расходов. Часто бывает полезно получить доступ к любой таблице через представление, даже если изначально вам не нужно выполнять какие-либо манипуляции в базовой таблице – это поможет, если вы позже обнаружите, что вам нужно их выполнять.
используйте предложение BETWEEN с STR_TO_DATE () . Проверьте код ниже:
$wh = STR_TO_DATE(`IssueDate`,'%d/%m/%Y')." between '02/12/2013' and '22/01/2014'"; $this->db->where($wh);
Ожидайте, что это даст вам отличный результат.