PerlのDBD::ODBCを使用してOracleデータベースに接続しています。ただし、where句で日付を使用してselectクエリを実行しようとすると、問題が発生します。この問題は、データベースの日付形式がDD-MON-RRであるために発生するようです(DBD :: ODBC :: FAQを参照)。データベースの設定を変更できないので、誰かが回避策を提案できますか?
2949 次
3 に答える
4
データベースのデフォルトの日付形式は、データベースに依存している場合にのみ重要ですが、一般的には重要ではありません。あなたはできる:
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';
于 2009-12-08T15:22:07.590 に答える
2
1つのオプションは、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(<<EOT);
SELECT date_field
FROM some_table
WHERE date_field > '2009-11-01'
EOT
于 2009-12-08T16:36:15.923 に答える
1
暗黙的なデータ型変換に依存しないでください。where句でいつでも日付形式を指定できます。
WHERE your_column = to_date(:your_parameter, 'yyyy/mm/dd')
于 2009-12-08T15:22:26.403 に答える