изменение символа в метку времени - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть две колонки (date character varying, time character varying) в таблице VM.Теперь я хочу объединить эти два столбца и изменить тип как метку времени.кто-нибудь может помочь мне сделать это?

Или же я хочу разделить данные на основе года (2017, 2018).Я использовал команду substring (date, '2018'), но она отвечает данными 2017 года, показывающими NULL вместо 2017 вместе с данными 2018 года.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы не сказали нам, что именно содержит содержимое этой таблицы, но что-то вроде этого должно работать:

Добавьте новый столбец timestamp (и, пожалуйста, найдите лучшее имя, чем "timestamp" илиts_column для него)

alter table the_table add ts_column timestamp;

Затем необходимо обновить данные

update the_table
    set ts_column = to_timestamp(concat("date", ' ', "time"), 'yyyy-mm-dd hh24:mi:ss')
where "date" is not null;

Выше предполагается, что дата хранится в столбце с именем "date" и время сохраняется встолбец с именем "time" форматируется как значения даты и времени ISO.Если это не так, вам нужно настроить параметр на функцию to_timestamp().Подробнее о маске формата см. Руководство

. Затем удалите старые столбцы:

alter table the_table drop "date", drop "time";

Чтобы извлечь год из даты или отметки времениВ столбце используйте функцию extract :

where extract(year from ts_column) = 2018

Обратите внимание, что приведенное выше не сможет использовать индекс для ts_column для ускорения запроса.

Альтернативный способ записи:

where ts_column >= date '2018-01-01' 
  and ts_column < date '2019-01-01';

, который может использовать индекс для ts_column

...