Oracle时间戳数据类型

hud*_*udi 48 sql oracle

没有参数的时间戳数据类型与参数0之间有什么不同:

timestamp VS timestamp(0)

Mic*_*ski 59

括号中的数字指定要存储的小数秒的精度.因此,(0)意味着不存储任何一秒的时间,并且只使用整秒.未指定的默认值是小数点分隔符后的6位数.

因此,未指定的值将存储如下日期:

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM
Run Code Online (Sandbox Code Playgroud)

(0)仅指定商店:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM
Run Code Online (Sandbox Code Playgroud)

请参阅有关数据类型的Oracle文档.

  • @hudi - 显然迈克尔或我都不需要积分,所以我不会在这里追逐代表.一般原则是你应该接受*最佳*答案,而不仅仅是第一个(除非第一个也是最好的).在将来调查答案时请记住这一点. (5认同)
  • 为了清楚起见,我不是说迈克尔不是一个比我更好的答案. (2认同)

APC*_*APC 28

很简单,数字是时间戳的精度,即列中保留的秒数:

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> 
Run Code Online (Sandbox Code Playgroud)

如果我们没有指定精度,那么时间戳默认为六个位置.

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> 
Run Code Online (Sandbox Code Playgroud)

请注意,我正在Linux上运行,因此我的TIMESTAMP列实际上给了我精确到六个位置,即微秒.在大多数(所有?)Unix版本中也是如此.在Windows上,限制是三个位置,即毫秒.(这仍然适用于最现代的Windows风格 - 需要引用).

正如所料,文档涵盖了这一点. 了解更多.


"当你创建时间戳(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> 
Run Code Online (Sandbox Code Playgroud)

(那些尾随的零可能是巧合,但它们不是.)