当0为0时,Postgresql会忽略忽略时间戳的微秒部分

时间:2018-01-10 12:26:46

标签: sql postgresql timestamp

我有一个Postgresql数据库,并创建一个这样的表:

psql (9.5.6) 
mydb=> CREATE TABLE ts_fail(ts TIMESTAMP);
mydb=> INSERT INTO ts_fail VALUES (NOW()),('2018-01-01 00:00:00.000000'::TIMESTAMP);

从这张表中选择时,我得到:

mydb=> SELECT * FROM ts_fail;
             ts
----------------------------
 2018-01-10 12:08:28.624142
 2018-01-01 00:00:00
(2 rows)

现在在第二行,微秒部分刚刚切断,我希望2018-01-01 00:00:00.0000000在这里。我需要一个通用格式,因为我需要在PHP中解析这个时间戳以生成DateTime对象。

我知道我能做到:

mydb=> SELECT to_char(ts, 'YYYY-MM-DD HH24:MI:SS.US') FROM ts_fail;
          to_char
----------------------------
 2018-01-10 12:08:28.624142
 2018-01-01 00:00:00.000000
(2 rows)

但有没有办法改变这种行为全球

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我发现PHP在DateFormat中支持一个“+”修饰符,它匹配尾随数据。所以在我的情况下微秒,如果它们存在(不是0000000)。

laravel框架的另一个问题是,它使用相同的dateFormat进行输入和输出。但是,当输出带有“+”的格式时,会包含文字“+”字符。为了防止出现这种情况,我在$inputFormat = "Y-m-d H:i:s+"$outputFormat = "Y-m-d H:i:s"中拆分了日期格式,并覆盖了Laravel中的asDateTime()函数。

唯一的缺点是,我现在真的失去了这种精确度。但这对我的申请来说并不重要。