Получить даты из базы данных Oracle - PullRequest
4 голосов
/ 10 августа 2010

Я использую базу данных Oracle и пытаюсь получить данные из ее таблиц с помощью PHP. Одна из таблиц содержит столбец даты, который ведет себя странно для меня.

Когда я открываю таблицу в своем клиенте БД (я использую Navicat Lite), я вижу даты вроде «2007-11-29 10:15:42», но когда я получаю их с помощью PHP и отображаю дату, на которой написано « 29-ноября-07" . Я использую простой запрос SQL и стандартные функции PHP (oci_parse, oci_execute, oci_fetch_array).

Почему значение из БД конвертируется в этот (бесполезный) формат? Как я могу получить дату так же, как она хранится в БД? Спасибо за ваши советы!

1 Ответ

8 голосов
/ 10 августа 2010

Тип данных Oracle DATE - это момент времени, к которому не прикреплен формат.При преобразовании даты в строку (например, для отображения) формат, применяемый к дате, будет зависеть от параметров сеанса (неявное преобразование).Из того, что я помню в PHP, функции поиска автоматически преобразуют дату в строку, используя параметр сеанса NLS_DATE_FORMAT.

Либо:

  • изменить NLS_DATE_FORMATзаранее с:

    ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    
  • или, если вы хотите указать другой формат в вашем запросе, вы должны явно запросить его:

    SELECT to_char(my_date, 'yyyy-mm-dd hh24:mi:ss') ...
    

Обновление

Благодаря ThinkJet за ссылку на PHP документацию :

DATE столбцы возвращаются какстроки, отформатированные в текущем формате даты.Формат по умолчанию можно изменить с помощью переменных среды Oracle, таких как NLS_LANG, или с помощью ранее выполненной команды ALTER SESSION SET NLS_DATE_FORMAT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...