2012-01-24 3 views

ответ

51

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

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

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM 

И задающие (0) магазины только:

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM 

See Oracle documentation on data types.

+0

ТНХ много ты был быстрее, так что я принимаю вы ответите хотя оба исправьте – hudi

+3

@hudi - очевидно, ни Майклу, ни мне нужны очки, поэтому я не преследую репутацию здесь. Общий принцип заключается в том, что вы должны принять * лучший * ответ, а не просто первый (если только первый не лучший). Пожалуйста, имейте это в виду, когда вы будете отвечать за ответы в будущем. – APC

+2

Чтобы быть ясным, я не говорю, что Майкл не лучший ответ, чем мой. – APC

27

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

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

Как и следовало ожидать, документация охватывает это. Find out more.


"при создании метки (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> 

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

+0

hm, но когда вы создаете временную метку (9), это дает вам нанос право? – hudi

Смежные вопросы