2017-03-16 91 views
2

需要将1/1000秒分辨率的时间戳转换为1/100分辨率。我可以使用to_char(timestamp, text)格式化功能来实现此目的,但需要在此处使用text的帮助。时间戳格式 - 从1/1000秒到1/100秒

输入表(注 - 这里的时间戳存储为varchar)

+-------------------------+ 
|  ms1000_val  | 
+-------------------------+ 
| 2017/02/20 08:27:17.899 | 
| 2017/02/20 08:23:43.894 | 
| 2017/02/20 08:24:41.894 | 
| 2017/02/20 08:28:09.899 | 
+-------------------------+ 

输出表

+------------------------+ 
|  ms100_val  | 
+------------------------+ 
| 2017/02/20 08:27:17.89 | 
| 2017/02/20 08:23:43.89 | 
| 2017/02/20 08:24:41.89 | 
| 2017/02/20 08:28:09.89 | 
+------------------------+ 
+0

只是使用'timestamp(2)' –

回答

6

您可以在括号中注明它,就像这里:

t=# select now()::timestamp(2); 
      now 
------------------------ 
2017-03-16 09:55:21.15 
(1 row) 

a S OP注意到http://rextester.com/CBZ17212会产生不同的结果,那么在psql运行:

t=# CREATE TABLE Table1 
t-#  ("ms1000_val" varchar(23)) 
t-# ; 
CREATE TABLE 
t=# 
t=# INSERT INTO Table1 
t-#  ("ms1000_val") 
t-# VALUES 
t-#  ('2017/02/20 08:27:17.892'), 
t-#  ('2017/02/20 08:23:43.891'), 
t-#  ('2017/02/20 08:24:41.897'), 
t-#  ('2017/02/20 08:28:09.893') 
t-# ; 
INSERT 0 4 
t=# select ms1000_val::timestamp(2) as time_formatted 
t-#  from Table1; 
    time_formatted 
------------------------ 
2017-02-20 08:27:17.89 
2017-02-20 08:23:43.89 
2017-02-20 08:24:41.9 
2017-02-20 08:28:09.89 
(4 rows) 
+0

检查此代码墙 - 它不会给出与上面的代码相同的结果 - 完全删除ms部分 - http://rextester.com/CBZ17212 – user3206440

+0

您说“要转换1/1000秒的时间戳“not varchar ... –

+0

很高兴被纠正。更新了问题。 – user3206440

1

证明这一点,我使用TO_CHAR和SUBSTR和我得到的格式为yyyy/MM/DD ......

select substr(to_char(now(),'yyyy/MM/dd HH:mm:ss MS'),0,length('yyyy/MM/dd HH:mm:ss MS')+1);