Вы можете просто сделать это:
$this->db
->select('birthday')
->where("STR_TO_DATE(birthday, '%d.%m.%Y') BETWEEN $minimumDate AND $maximumDate")
->get('usertable');
Но в этом случае вам придется самостоятельно экранировать переменные.
Вы можете также сделать это:
$this->db
->select('birthday')
->where("STR_TO_DATE(birthday, '%d.%m.%Y') >", $minimumDate)
->where("STR_TO_DATE(birthday, '%d.%m.%Y') <", $maximumDate)
->get('usertable');
Это автоматически пропустит второй параметр where()
, но теперь мы запускаем STR_TO_DATE()
дважды и имеем чуть менее элегантный запрос (без использования BETWEEN
).
Active Record может быть трудно использовать функции MySQL с.Иногда лучше просто выполнить запрос вручную, если вы не строите его динамически.CI предлагает несколько способов сделать это легко, избегая при этом правильного ввода.
См. Раздел в руководстве пользователя о Привязках запросов :
$sql = "SELECT birthday
FROM usertable
WHERE STR_TO_DATE(birthday, '%d.%m.%Y')
BETWEEN ? AND ?";
$this->db->query($sql, array($minimumDate, $maximumDate));