我有一个包含12个时间戳列和3个其他字段的表。 我无法更改时间戳列上的字段类型。
我需要以m / d / y的形式向用户显示所有15个字段。有没有办法同时格式化它们而不必对每个应用DATE_FORMAT? 我宁愿不必这样做
SELECT DATE_FORMAT(field, '%c/%e/%y') AS field
如果可能的话,每一个。
我正在使用mySQL& PHP和我并不关心转换发生的位置。
答案 0 :(得分:1)
您是否考虑使用MDB2或PDO等数据库层,可以为您转换类型? MDB2有一个日期类型,显示YYYY-MM-DD格式,但很容易用strftime和strtotime转换为m / d / y。
使用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... } }
您可以在MDB2 on InstallationWiki找到有关以这种方式使用MDB的更多文档。此外,您还可以找到MDB2数据类型列表以及它们映射到显示值的内容。此外,Docs for MDB2_Extended将是一个很好的信息来源。
编辑:显然你必须分别在每一行使用strftime和strtotime。如果您将MDB2_FETCHMODE_OBJECT
切换到上面的MDB2_FETCHMODE_ORDERED
或MDB2_FETCHMODE_ASSOC
,您可以使用foreach循环在需要重新格式化的所有行上运行strftime和strtotime。
答案 1 :(得分:1)
您可以在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列结果,检查该值是否为日期并进行转换。
答案 2 :(得分:0)
我认为不可能,查询在返回结果之前不知道列是什么,你必须告诉它改变每个日期时间的格式。
马特