В Oracle тип данных timestamp

чем отличается тип данных timestamp без параметра и с параметром 0:

timestamp VS timestamp(0)

2 ответов


число в круглых скобках указывает точность дробных секунд для хранения. Итак,(0) означало бы не хранить какую-либо долю секунды и использовать только целые секунды. Значение по умолчанию, если не указан-это 6 цифр после десятичного разделителя.

таким образом, неопределенное значение будет хранить дату, как:

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM

и определение (0) магазинах только:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM

см. В документации Oracle на типы данных.


довольно просто число-это точность метки времени, доля секунды, проведенная в столбце:

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-цитирование необходимо).

как и следовало ожидать, документация охватывает это. узнать больше.


"при создании метки времени (9) это дает вам право nanos"

только если ОС поддерживает его. Как вы можете видеть, мой прибор 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> 

(эти конечные нули могут быть совпадением, но это не так.)