2008-10-01 2 views

ответ

25

Поскольку точность DATE относится ко второй (и без доли секунды), нет необходимости в TRUNC.

Тип данных TIMESTAMP позволяет использовать доли секунды. Если вы преобразуете его в DATE, дробные секунды будут удалены - например.

select cast(systimestamp as date) 
    from dual; 
1

укоротить timestamp до нескольких секунд вы можете привести его к дате:

CAST(timestamp AS DATE) 

Чтобы затем выполнить TRUNC «S в статье:

TRUNC(CAST(timestamp AS DATE), 'YEAR') 
2

На общая тема усечения дат Oracle, вот ссылка на документацию для моделей формата, которые можно использовать в дате trunc() AND round() fu nctions

http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718

«Секунды» нет в списке, так как зернистость ДАТЫ типа данных в секундах.

0

что-то по заказу:

select to_char(current_timestamp, 'SS') from dual; 
1

Я использовал функцию:

FUNCTION trunc_sec(p_ts IN timestamp) 
IS 
    p_res timestamp; 
BEGIN 
    RETURN TO_TIMESTAMP(TO_CHAR(p_ts, 'YYYYMMDDHH24MI'), 'YYYYMMDDHH24MI'); 
END trunc_sec; 
+2

Я думаю, что это путь, поскольку, в отличие от большинства этих ответов, он не зависит от версии Oracle. Это не совсем правильно, но вы пропустили секунды. Должно быть что-то вроде: to_date (to_char (systimestamp, 'YYYY-MM-DD HH24: MI: SS'), 'YYYY-MM-DD HH24: MI: SS') – delany 2013-08-02 14:49:40

3

Я извиняюсь, но все мои предшественники, кажется, не так:

выберите бросок (systimestamp как дата) от двойного не обрезается, а округляется до следующей секунды.

Я использую функцию:

CREATE OR REPLACE FUNCTION TRUNC_TS(TS IN TIMESTAMP) RETURN DATE AS 
BEGIN 
    RETURN TS; 
END; 

SELECT systimestamp, trunc_ts(systimestamp) date_trunc, 
    CAST(systimestamp AS DATE) date_cast FROM dual 

SYSTIMESTAMP      DATE_TRUNC    DATE_CAST 
21.01.10 15:03:34,567350 +01:00 21.01.2010 15:03:34 21.01.2010 15:03:35 
+0

Я запустил ваш код, но не могу воспроизведите ваши результаты. В нескольких десятках тестов (большинство из которых было затронуто округлением), секундная часть никогда не отличалась между тремя результатами. Какую версию Oracle вы используете? (Я был на 11.2). – 2010-11-24 16:07:50

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