oracle 10g中where子句中的年份和月份

时间:2015-03-16 09:16:18

标签: php oracle oracle10g date-format date-formatting

我的日期格式为2014年3月。如何在数字格式中将月份和年份与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中的编码

2 个答案:

答案 0 :(得分:1)

对于可搜索的谓词,您应该避免更改每一行数据以适应单个参数。

相反:调整参数以适合数据

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年3月的所有记录);此方法允许在字段C_DATE上使用索引以提高查询效率。

答案 1 :(得分:-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);