【问题标题】:PDO get fractional seconds from PostgresPDO 从 Postgres 获取小数秒
【发布时间】:2017-07-22 01:06:56
【问题描述】:

当我使用简单的 pdo 语句 (PHP7)postgresql (9.6) 查询日期时间字段时

$sql = "SELECT date FROM table"
$stmt = $adapter->createStatement($sql);
$stmt->prepare($sql);
$stmt->execute();

我收到的是字符串 2017-02-03 15:51:44 而不是 2017-02-03 15:51:44.240000(最后一个输出是 psql 控制台的结果)

我看到一个帖子说 this bug report FROM 2011 about mysql and php 5,我猜自 2011 年以来问题已得到解决,或者人们已经找到解决此问题的方法。

有人找到了在 php 中检索小数秒的解决方案吗?

【问题讨论】:

  • date 列的数据类型是什么?
  • 没有时区的时间戳
  • 请在下面尝试我的答案并检查它为您提供的结果
  • 你可以用你想要的格式来使用 to_char :)
  • 谢谢@ClémentPrévost 我将使用 SELECT to_char(date, 'YYYY-MM-DD HH24:MI:SS.MS') FROM table 但因为我没有构建 sql 请求,我真的不知道哪个字段是日期,我认为这不是让正则表达式修改 Sql 请求以包装每个日期时间字段的最佳方法:(

标签: php postgresql pdo php-7


【解决方案1】:

有人找到了在 php 中检索小数秒的解决方案吗?

它们通常是结果的一部分。 这是使用默认 php-7.1.2 安装检索时间戳的实际代码:

<?php
$link = new PDO("pgsql:dbname=test;host=localhost", $user, $password);

$stmt = $link->prepare("SELECT '2016-01-02 22:44:31.625129'::timestamp AS t");
$stmt->execute();
$result = $stmt->fetch();
print_r($result);
?>

结果:

大批 ( [t] => 2016-01-02 22:44:31.625129 [0] => 2016-01-02 22:44:31.625129 )

因此,保持这些微秒没有什么特别的事情要做,如果需要一些额外的代码,或者在 SQL 中截断或强制转换为 timestamp(0),就可以丢弃它们。

【讨论】:

    【解决方案2】:

    如果你把它变成一个 varchar 会发生什么?

    $sql = "SELECT date::varchar FROM table"
    

    【讨论】:

    • 此查询在 psql 和 pdo 中都返回 2017-02-03 15:51:44,我需要小数秒
    • 仅作记录,如果您在 psql 中运行“select current_timestamp”,您会得到小数秒吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2020-03-13
    • 2011-04-13
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多