Подтвердить что ты не робот

Тип данных временной метки Oracle

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

timestamp VS timestamp(0)

4b9b3361

Ответ 1

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

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

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM

И только сохранение (0):

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM

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

Ответ 2

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

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), это дает вам право наносов"

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

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