日期:2014-05-16  浏览次数:21079 次

PostgreSQL 时间的问题 100分
原来用MySQL数据库的,时间列是用datatime的 显示时间格式是YYYY-MM-DD hh:mm:ss的
现在换PostgreSQL数据库了 时间的类型我查了下 有timestamp with time zone类型和timestamp without time zone类型
timestamp with time zone类型显示的是"2010-04-13 09:37:11.89+09" 最后有个时区的显示,格式也不对
timestamp without time zone类型显示的是虽然是YYYY-MM-DD hh:mm:ss格式,
但是我现在假如设定了时间列的类型为timestamp without time zone,我更新现在时间update xx set dt=now() 结果秒的位置出来了好几位 比如2010-04-13 09:37:11.265
我知道可以用 SET updatedt= CAST(to_char(now(), 'YYYY/MM/DD HH24:MI:SS') As timestamp without time zone)
这种方式来转换,但是有没有能够在建表的时候 能够和MySQL的datatime一样的类型呢 更新的时候set dt=now() 时间也是YYYY-MM-DD hh:mm:ss格式  
主要是我不太想动SQL文了 如果要这么转换太麻烦了
请教大虾们~~

------解决方案--------------------
timestamp是精确到毫秒级,小数点后面是表示毫秒。
应该不影响你的应用,大部分的客户端软件表示时间都精确到秒,所以传送到客户端都会截取到秒。


------解决方案--------------------
测试了一下,确实是这样,搜索了一下,似乎POSTGRESQL要准确到毫秒
------解决方案--------------------
客户端都可以自动截短的。
------解决方案--------------------
用字符串类型吧。
------解决方案--------------------
ALTER TABLE "EE" ADD COLUMN "DD" timestamp(0) without time zone;
这样就OK了
------解决方案--------------------
引用timestamp [ (p) ] [without time zone]
time ,timestamp 和interval 接受一个可选的精度值 p,这个精度值声明在秒域后面小数点之后保留的位数。 缺省的时候在精度上是没有明确的绑定的, p 有用的范围对 timestamp和 interval 是从 0 到大约 6。

对于 time 类型,如果使用了八字节的整数存储,那么 p 允许的范围是从 0 到 6,如果使用的是浮点数存储,那么这个范围是 0 到 10。

参考:
http://www.pgsqldb.org/pgsqldoc-8.1c/datatype-datetime.html