PHP oci_fetch_all из БД Oracle преобразует значение даты - PullRequest
0 голосов
/ 10 ноября 2019

У меня проблемы с получением значения из БД Oracle, где значение преобразуется в формат даты, который мне не нужен. Я бы предпочел иметь необработанное значение или, по крайней мере, знать, где я могу изменить этот преобразованный формат даты. Любопытно, если кто-нибудь мог бы указать мне правильное направление здесь.

$conn = oci_connect(ORACLE_DB_USERNAME, ORACLE_DB_PASSWORD, '//' . ORACLE_DB_HOST . '/' . ORACLE_DB_SID);
$sql_query = "SELECT * FROM \"ASSET\".\"NAV\" WHERE sem = '2820' AND ROWNUM = 1 ORDER BY date_time DESC";
$stid = oci_parse($conn, $sql_query);
$row_count = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC);
oci_free_statement($stid);
oci_close($conn);

Данные в БД должны возвращаться как: CREATE_DATE => '23-07-2019 19:30:11'

Кроме того, я получаю это: CREATE_DATE => '23-JUL-19'

1 Ответ

1 голос
/ 10 ноября 2019

Вы получаете даты обратно в формате по умолчанию вашей базы данных. Одна вещь, которую вы могли бы сделать, это изменить настройку NLS вашего сеанса на ожидаемый вами формат. Для этого вы можете выполнить эту команду:

alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss'

Как только эта команда будет выполнена, все даты будут выбраны в этом формате в течение времени жизни вашего сеанса Oracle.

Если вы имеете делос timestamp типом данных вместо date, тогда параметром nls будет nls_timestamp_formatnls_timestamp_tz_format для timestamp with timezone).


Другой вариант - использовать to_char() для форматированиядата в нужном формате в самом запросе:

$sql_query = "SELECT <column list>, to_char(create_date, 'dd-mm-yyyy hh24:mi:ss') create_date FROM ...";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...