Oracle日期格式的Perl DBD::ODBC问题

Oracle日期格式的Perl DBD::ODBC问题,perl,oracle,datetime,odbc,dbd,Perl,Oracle,Datetime,Odbc,Dbd,我正在使用Perl连接到Oracle数据库。但是,当我尝试使用where子句中的日期执行select查询时,出现了一个问题。出现此问题的原因似乎是数据库的日期格式为DD-MON-RR(请参阅)。由于我无法更改数据库的设置,有人能建议一种解决方法吗?数据库的默认日期格式只有在您依赖它时才起作用,通常情况下,您不应该依赖它。你可以: 1) 指定查询中日期的格式: select * from news where news_date = to_date ('01-DEC-2009','DD-MON-R

我正在使用Perl连接到Oracle数据库。但是,当我尝试使用where子句中的日期执行select查询时,出现了一个问题。出现此问题的原因似乎是数据库的日期格式为DD-MON-RR(请参阅)。由于我无法更改数据库的设置,有人能建议一种解决方法吗?

数据库的默认日期格式只有在您依赖它时才起作用,通常情况下,您不应该依赖它。你可以:

1) 指定查询中日期的格式:

select *
from news
where news_date = to_date ('01-DEC-2009','DD-MON-RRRR');
2) 对日期文字使用ANSI标准:

select *
from news
where news_date = DATE '2009-12-01';

不要依赖隐式数据类型转换。始终可以在where子句中指定日期格式:

WHERE your_column = to_date(:your_parameter, 'yyyy/mm/dd')

一个选项是使用to_DATE()函数(或ANSI“DATE”关键字)转换每个查询中的格式:

WHERE date_field > TO_DATE('2009-11-01', 'YYYY-MM-DD');
-- or
WHERE date_field > DATE '2009-11-01'
如果您必须经常这样做,更好的选择是设置会话的格式:

$dbh->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
$dbh->do("ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SSxFF'");
$dbh->do("ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SSxFF'");
然后:

my$sth=$dbh->prepare(
my $sth = $dbh->prepare(<<EOT);
SELECT date_field
FROM some_table
WHERE date_field > '2009-11-01'
EOT