Формирование нескольких полей даты в MySQL одновременно - PullRequest
0 голосов
/ 11 июля 2009

У меня есть таблица с 12 столбцами временных меток и 3 другими полями. Я не могу изменить тип поля в столбцах метки времени.

Мне нужно отобразить все 15 полей пользователю как m / d / y. Есть ли способ отформатировать их все одновременно, не применяя DATE_FORMAT к каждому? Я бы предпочел не делать

SELECT DATE_FORMAT(field, '%c/%e/%y') AS field
для каждого, если это возможно.

Я использую MySQL и PHP, и мне все равно, где происходит преобразование.

Ответы [ 3 ]

1 голос
/ 11 июля 2009

Рассматривали ли вы использование слоя базы данных, такого как MDB2 или PDO, который может преобразовывать типы для вас? MDB2 имеет тип даты, который отображает формат ГГГГ-ММ-ДД, но может быть легко преобразован в м / д / г с помощью strftime и strtotime.

Пример использования MDB2:

$dsn = "mysql://user@pass/db"; (not sure about DSN format, you might have to poke the MDB2 documentation)
$connection = MDB2::connect ($dsn);
$connection->loadModule ("Extended");
$rows = $connection->getAll ("your query", array ('date', ...), $parameters, array (paramater-types), MDB2_FETCHMODE_OBJECT);

if (MDB2_Driver_Common::isError ($rows)) throw new Exception ("Error!");
else { foreach ($rows as $row) { ...Do something... } }

Более подробную информацию об использовании MDB вы можете найти в MDB2 на InstallationWiki . Также там вы найдете список типов данных MDB2 и их отображения для отображаемых значений. Кроме того, Документы для MDB2_Extended будут хорошим источником информации.

Редактировать: Очевидно, вам придется использовать strftime и strtotime в каждой строке отдельно. Если вы переключите MDB2_FETCHMODE_OBJECT на MDB2_FETCHMODE_ORDERED или MDB2_FETCHMODE_ASSOC выше, вы, вероятно, можете использовать цикл foreach для запуска strftime и strtotime во всех строках, которые необходимо переформатировать.

1 голос
/ 11 июля 2009

Вы можете написать простую процедуру преобразования даты в php, например:

function mysql2table($date) {
    $new = explode("-",$date);
    $a=array ($new[2], $new[1], $new[0]);
return $n_date=implode("-", $a);
}

Который я украл отсюда: http://www.daniweb.com/code/snippet736.html#

Затем просто циклически просматривайте результаты столбца SQL, проверяя, является ли значение датой, и преобразуйте его.

0 голосов
/ 11 июля 2009

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

Мэтт

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