год и месяц, где пункт в оракуле 10 г

У меня есть дата в формате март 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

1

Решение

Для предиката 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 для эффективности запросов.

1

Другие решения

Вы можете попробовать с 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);
-1

По вопросам рекламы [email protected]