Как удалить компонент времени из отметки времени?

Как удалить компонент времени из отметки времени, например:

2014-01-01 12:00:01

Становиться

2014-01-01 00:00:00

2 ответа

Решение

Похоже, вы на самом деле спрашиваете, как удалить компонент времени из timestamp тип.

Давайте настроим некоторые тестовые данные:

CREATE TABLE public.test (
    time_stamp timestamp
);

INSERT INTO public.test (time_stamp) VALUES (SYSDATE());
INSERT INTO public.test (time_stamp) VALUES (SYSDATE());
INSERT INTO public.test (time_stamp) VALUES (SYSDATE());
COMMIT;

Перед преобразованием данные выглядят так:

 time_stamp
----------------------------
 2014-07-01 21: 37: 11.454081
 2014-07-01 21: 37: 15.521172
 2014-07-01 21: 37: 18.048398 

Мы будем использовать TRUNC Функция для усечения значения:

SELECT TRUNC(time_stamp, 'dd') FROM public.test;

Это производит:

 TRUNC
---------------------
 2014-07-01 00:00:00
 2014-07-01 00:00:00
 2014-07-01 00:00:00 

Если вы предпочитаете выписать это:

SELECT CAST(CAST(time_stamp AS date) AS timestamp) FROM public.test;

Или же

SELECT time_stamp::date::timestamp FROM public.test;

Если вы знаете фактическую разницу, которую хотите сбросить, вы можете использовать timestampadd. Для вашего примера вам нужно сделать это дважды:

select timestampadd(ss, -1, (timestampadd(hh, -12, '2014-01-01 12:00:01')))

Это ссылка на документацию Vertica по использованию timestampadd: https://my.vertica.com/docs/5.0/HTML/Master/16090.htm

Другие вопросы по тегам