2015-05-18 4 views
1

Любая идея, как изменить timestamp размер столбца в DB2?Как изменить размер столбца метки времени в DB2?

Я попытался изменить таблицу, отбросить, а затем создать таблицу. Оба не работали.

Вот запросы, которые я пробовал:

alter table clnt_notes alter column lupd_ts set data type timestamp(26) 

create table CLNT_NOTES 
    (NOTE_ID int not null generated always as identity (start with 1, increment by 1), 
    CLNT_ID varchar(10) not null, 
    TX varchar(200), 
    LUPD_TS timestamp(26) not null) 
+0

db2 timestamps имеют фиксированную длину 26, формат выглядит следующим образом: «0000-00-00-00.00.00.000000» –

+0

в моей БД говорится «10». Итак, вопрос в том, как изменить его на более высокое значение, которое составляет 26? –

+0

, потому что он сохраняется в упакованном формате, он не сохраняется в этом формате в базе данных, но это то, что вы должны получить, когда вы его читаете. –

ответ

0

Поскольку вы обращаетесь к 10 как длина, я буду считать, что вы ищете в SYSIBM.SYSCOLUMNS (или другой эквивалент таблицы в каталоге.

LENGTH столбца в каталоге относится к внутренней длине полей можно рассчитать это, используя следующую формулу:.

FLOOR(((p+1)/2) + x) 
  • p является точность метки времени (количество знаков после запятой [микросекунд])
  • x является 7 для метки времени без временной зоны, или 9, если оно имеет часовой пояс (если поддерживается вашей платформы)

Если вы сравниваете поле с SQLCA, это поле будет длиной символьного представления метки времени. См. this Information Center article для объяснения между двумя полями.

Если вы действительно хотите изменить масштаб своего поля метки времени, вы можете использовать следующую инструкцию. x должно быть целым числом для числа мест после десятичной точки в позиции секунд.

Количество разрешенных десятичных знаков зависит от платформы и версии. Если вы используете более старую версию, вы вряд ли можете изменить масштаб, который установлен на 6. Однако некоторые из новых платформ (например, z/OS 10+, LUW 9.7+) позволят вам установить масштаб к числу от 0 до 12 (включительно).

ALTER TABLE SESSION.TSTAMP_TEST 
ALTER COLUMN tstamp 
SET DATA TYPE TIMESTAMP(x); 
0

Это зависит от вашей платформы и версии DB2. Временные метки в DB2, используемые для всех, имеют 6-значную точность для частичной части секунды. В строковой форме «ГГГГ-ММ-ДД-ЧЧ: ММ: SS.000000»

Однако DB2 LUW 10.5 и DB2 для IBM i 7.2 поддерживают от 0 до 12 цифр точности для части секунд доли. В строковой форме вы могли бы иметь от «ГГГГ-ММ-ДД-ЧЧ: ММ: СС» значение «ГГГГ-ММ-ДД-ЧЧ: ММ: SS.000000000000».

Точность по умолчанию - 6, поэтому, если вы укажете временную метку без точности (длины), вы получите шестизначную точность. В противном случае вы можете указать точность от однако о до 12.

create table mytable (
    ts0 timestamp(0) 
    , ts6 timestamp 
    , ts6_also timestamp(6) 
    , ts12 timestamp(12) 
); 

Обратите внимание, что в то время как внешняя (не совсем строка) формат СУБД поверхность может варьироваться от 19 до 32 байт. Внутренний формат, в котором хранится TS, может не совпадать. В DB2 для IBM i, по крайней мере, внутренний формат хранения TS-поля занимает 10 байтов независимо от точности. Я подозреваю, что то же самое верно для других платформ.

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