我有一个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)
但有没有办法改变这种行为全球?
答案 0 :(得分:0)
我解决了这个问题。我发现PHP在DateFormat中支持一个“+”修饰符,它匹配尾随数据。所以在我的情况下微秒,如果它们存在(不是0000000)。
laravel框架的另一个问题是,它使用相同的dateFormat进行输入和输出。但是,当输出带有“+”的格式时,会包含文字“+”字符。为了防止出现这种情况,我在$inputFormat = "Y-m-d H:i:s+"
和$outputFormat = "Y-m-d H:i:s"
中拆分了日期格式,并覆盖了Laravel中的asDateTime()
函数。
唯一的缺点是,我现在真的失去了这种精确度。但这对我的申请来说并不重要。