Я должен сравнить только дату, но в поле таблицы made_at имеет обе даты и времени, как можно игнорировать время в Codeigniter - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно сравнивать только дату, а не время, но в дБ дата и время доступны в поле create_at.я должен игнорировать время, мне нужно только указывать дату от db до cmpare в предложении where.

$this->db->select('o.* , c.email');
$this->db->from('order as o');
$this->db->join('customer as c', 'o.customer_id=c.id','left');
$this->db->where("CAST(o.created_at) BETWEEN $date1 AND $date2");

Номер ошибки: 1064

В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с ') МЕЖДУ 2019/06/04 И 2019/06/21' в строке 4

SELECT `o`.*, `c`.`email` FROM `order` as `o` 
LEFT JOIN `customer` as `c` ON `o`.`customer_id`=`c`.`id` 
WHERE CAST(o.created_at) BETWEEN `2019/06/04` AND 2019/06/21

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Вы должны сначала преобразовать их в Y-m-d формат, выполнив

$start = str_replace("/","-", $date1); // 2019-06-04
$end = str_replace("/","-", $date2); // 2019-06-21

и затем для стороны запроса,

// you should cast as something but you left blank. Instead use as DATE
$this->db->where("CAST(o.created_at AS DATE) BETWEEN '$start' AND '$end'");

Поскольку Y/m/d не использует формат MySQL или php по умолчанию для соответствия типу данных date.

Синтаксис CAST:

CAST( value AS type )
0 голосов
/ 21 июня 2019

На стороне php вам нужно использовать формат даты MySQL для ваших $date переменных (YYYY-MM-DD).И затем, в вашем запросе, вам нужно указать тип данных для CAST() и процитировать ваши значения:

$this->db->where("CAST(o.created_at AS DATE) BETWEEN '$date1' AND '$date2'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...