использование усеченной даты в sql

кто-нибудь может объяснить мне работу функции trunc (дата) в оракуле. мой запрос, как показано ниже.

select trunc(tran_date) from tablename;

я не прошел ни один тип формата. Если я сравню дату, представленную в таблице, без усечения (даты), это не даст никакого результата. и если сравнить таблицу дат с trunc (date), это даст мне правильный результат. пожалуйста, объясните, как это работает. и есть ли замена функции trunc, так как это занимает слишком много времени.


person GurunathKudalkar    schedule 05.03.2019    source источник


Ответы (1)


trunc(tran_date) возвращает часть даты из столбца date без компонента времени (что соответствует полночи в начале дня).

Несмотря на свое название, тип данных date в Oracle включает время. Это еще больше сбивает с толку, потому что иногда вы не видите время в наборе результатов (в зависимости от того, как вы обращаетесь к данным).

Даты, которые вы сравниваете, не имеют компонента времени. Итак, сравнение работает с trunc(). Но компонент времени на tran_date препятствует работе сравнения без trunc().

person Gordon Linoff    schedule 05.03.2019
comment
Да, я не вижу время в наборе результатов, поэтому какой будет другой метод, чтобы я мог получить время в наборе результатов, или есть ли какая-либо замена функции trunc для сравнения даты. - person GurunathKudalkar; 05.03.2019
comment
@ГурунатКудалкар . . . По моему опыту, когда я использую столбцы timestamp, я вижу компонент времени. - person Gordon Linoff; 05.03.2019
comment
Я думаю, что это не совсем правильно. trunc(tran_date) усекает значение даты до полуночи. Компонент времени не равен NULL, т.е. он все еще существует. Он просто получает значение 00:00:00. - person Wernfried Domscheit; 05.03.2019