Я использую Perl DBD::ODBC для подключения к базе данных Oracle. Однако возникает проблема, когда я пытаюсь выполнить запрос выбора, используя дату в предложении where. Похоже, эта проблема возникает из-за того, что формат даты базы данных является DD-MON-RR (см. DBD::ODBC::FAQ). Поскольку я не могу изменить настройки базы данных, может ли кто-нибудь предложить обходной путь?Perl DBD :: Проблемы ODBC с форматами дат Oracle
0
A
ответ
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';
1
Не полагайтесь на неявное тип данных преобразование. Вы всегда можете указать формат даты в предложении, где:
WHERE your_column = to_date(:your_parameter, 'yyyy/mm/dd')
2
Одним из вариантов является использование 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
Смежные вопросы
- 1. DBD :: ODBC vs win32 :: odbc
- 2. Perl DBD :: ODBC to Informix DBMS
- 3. Perl: DBD :: ODBC :: ул Execute не удалось
- 4. Проблемы с установкой DBD :: mysql в Perl
- 5. Проблемы с установкой perl-DBD-MySQL
- 6. Как указать номер порта с DBD :: ODBC?
- 7. Ошибка в Perl install_driver (Oracle): - Невозможно загрузить '../DBD/Oracle/Oracle.dll' для модуля DBD :: Oracle Win64
- 8. Доступ к базе данных MySQL с использованием Perl DBD: ODBC
- 9. Perl CPAN DBD :: Oracle ошибка установки
- 10. DBD :: Oracle and utf8
- 11. Как установить DBD :: Oracle в Strawberry Perl
- 12. Установка DBD :: Oracle
- 13. Ошибка Oracle DBD от скрипта Perl
- 14. perl + DBD :: Oracle + mod_perl + oracle LDAP name resolver = crash?
- 15. Perl DBD fetchrow_array ошибка:
- 16. Использование Oracle с Perl
- 17. Невозможно загрузить '/usr/local/lib64/perl5/auto/DBD/ODBC/ODBC.so' для модуля DBD :: ODBC: libodbc.so.1
- 18. Преобразование дат с «нетрадиционными» форматами
- 19. Обработка критических ошибок DBD :: Ошибки ODBC
- 20. Nagios check_nrpe не работает с Perl DBD :: Oracle
- 21. Ошибка при установке DBD :: Oracle
- 22. Python эквивалент dbi perl/DBD :: доступ к прокси? (Perl DBI/DBD :: Proxy для Python)
- 23. Perl: скачать DBD :: AnyData
- 24. Проблемы с Perl DBI/DBD на OSX 10.9 Mavericks
- 25. DBD-Oracle 1,74 установить с клиентом Oracle 12.1.0.2
- 26. Perl и DBD :: Oracle - сколько строк доступно для извлечения? RowsInCache?
- 27. DBD :: пакет ODBC для fedora 17
- 28. Perl - слишком много ошибок файлов при использовании DBD Oracle
- 29. Почему мой скрипт Perl CGI не находит DBD Oracle?
- 30. Относительно Perl DBD :: Установка Oracle в локальном каталоге