У меня есть дата в формате март 2014 года. Как получить месяц и год в числовом формате для сравнения в запросе Oracle 10g.
<?php
$date = "March 2014";
?>
Мой запрос, который я пытаюсь получить,
select EMP_NAME where month = "03" and year = "2014".
Вот моя структура таблицы
EMP_ID | EMP_NAME | C_DATE
1 | ABC | 01-FEB-14
2 | XYZ | 03-MAR-14
Примечание: я пишу код в php
Для предиката sargable вы должны избегать изменения каждой строки данных в соответствии с одним параметром.
Вместо этого: отрегулируйте параметр в соответствии с данными
select
*
from your_table
where C_DATE>= to_date('March 2014','MON YYYY', 'NLS_DATE_LANGUAGE = American')
and C_DATE< add_months(to_date('March 2014','MON YYYY', 'NLS_DATE_LANGUAGE = American'),1)
Обратите внимание, что данные — C_DATE — не зависят от какой-либо функции, но вы получите желаемый результат (все записи за март 2014 года); этот метод позволяет использовать индексы в поле C_DATE для эффективности запросов.
Вы можете попробовать с TO_CHAR(date, 'MON')
за месяцы и TO_CHAR(date, 'YYYY')
на год.
Запрос будет
select EMP_NAME where TO_CHAR(C_DATE, 'MON') = month and TO_CHAR(C_DATE, 'YYYY') = year
А в php вам нужно будет управлять датой, чтобы получить год и месяц и передать их в запрос
$dt = new DateTime("March 2014");
$month = $dt->format("m"); //03
$year = $dt->format("Y"); //2014
//Here connect to the db..
$db->query("SELECT EMP_NAME FROM yourTable WHERE TO_CHAR(C_DATE, 'MON') = :month AND TO_CHAR(C_DATE, 'YYYY') = :year");
$db->bindParam(":month", $month);
$db->bindParam(":year", $month);