@mudcrab

В чем может быть причина разницы результатов запроса в PDO и SQL(разница формата дат)?

Здравствуйте!
Столкнулся с проблемой - делаю запрос в PHP через PDO

$dbh = new PDO('connection string', 'user', 'pass');
 
$stmt = $dbh->prepare('SELECT id, date_begin, date_end FROM v_accounts limit 1');
 
$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));


получаю в консоли результат
array(1) {
  [0] =>
  array(3) {
    'id' =>
    string(9) "248234999"
    'date_begin' =>
    string(10) "01.01.2022"
    'date_end' =>
    string(10) "01.07.2022"
  }
}

При выполнении этого же запроса в базе данных(PostgreSQL 9.6)

SELECT id, date_begin, date_end FROM v_accounts LIMIT 1

получаю другой результат:
248234999,0006-07-15,0007-01-12
При этом v_accounts это представление(view) и поля date_begin и date_end в нем выбираются из другой таблицы(где у этих полей тип datetime) с помощью следующего кода
to_date(date_begin::text, 'DD.MM.YYYY'::text) AS date_begin,
to_date(date_end::text, 'DD.MM.YYYY'::text)   AS date_end

В чем может быть причина такой разницы результатов запроса(разница формата дат)?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
@Vitsliputsli
to_date(date_begin::text, 'DD.MM.YYYY'::text)

т.е. у нас есть поле date_begin в формате datetime, а мы его кастуем в текст. Затем из текста по какому-то непонятному формату получаем дату.

А все это работает скорее всего потому, что в php при подключении к БД используется формат даты 'DD.MM.YYYY', поэтому эта бредятина работает, а когда напрямую подключились к базе, там вероятно дефолтный 'YYYY-MM-DD' и получается чушь на выходе.

В общем удалите эту дикость и посмотрите как в PostgreSQL нормально получить date без промежуточного преобразования в строку.
Ответ написан
Stalker_RED
@Stalker_RED
Я вам разных кастов принес https://extendsclass.com/postgresql/51d5be2
Обратите внимание на таймзону, неплохо бы ее правильно указать. Либо делать строго по локальному времени, без таймзоны, если вы уверены что вам никогда не понадобятся клиенты в других часовых поясах.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы