没有参数的时间戳数据类型和带有参数0的时间戳数据类型之间有什么不同:
timestamp
和 timestamp(0)
的区别:
括号中的数字指定了要存储的小数秒的精度。 因此,(0)
表示不存储任何小数秒,仅使用整秒。 如果未指定,则默认值为小数分隔符后的6个数字。
因此,未指定值将存储如下日期:
TIMESTAMP 24-JAN-2012 08.00.05.993847 AM
指定 (0)
仅存储:
TIMESTAMP(0) 24-JAN-2012 08.00.05 AM
简单来说,该数字是时间戳的精度,即列中以秒为单位的小数部分:
SQL> create table t23
2 (ts0 timestamp(0)
3 , ts3 timestamp(3)
4 , ts6 timestamp(6)
5 )
6 /
Table created.
SQL> insert into t23 values (systimestamp, systimestamp, systimestamp)
2 /
1 row created.
SQL> select * from t23
2 /
TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM
SQL>
如果没有指定精度,时间戳默认为六位。
SQL> alter table t23 add ts_def timestamp;
Table altered.
SQL> update t23
2 set ts_def = systimestamp
3 /
1 row updated.
SQL> select * from t23
2 /
TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
TS_DEF
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM
24-JAN-12 05.59.27.293305 AM
SQL>
请注意,我正在运行Linux系统,所以我的TIMESTAMP
列实际上可以精确到六位,即微秒。这在大多数(所有?)Unix版本中也是如此。在Windows上,限制为三个位置,即毫秒。(最现代的Windows版本是否仍然如此-需要引证)。如预期的那样,文档涵盖了这一点。了解更多。“当你创建timestamp(9)时,这会给你纳秒,对吗?”
仅当操作系统支持它时才是这样。正如您所看到的,我的OEL设备不支持:
SQL> alter table t23 add ts_nano timestamp(9)
2 /
Table altered.
SQL> update t23 set ts_nano = systimestamp(9)
2 /
1 row updated.
SQL> select * from t23
2 /
TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
TS_DEF
---------------------------------------------------------------------------
TS_NANO
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM
24-JAN-12 05.59.27.293305 AM
24-JAN-12 08.28.03.990557000 AM
SQL>
这些末尾的零可能看起来是巧合,但实际上它们并不是。