Создать временную метку с фиксированной временной частью

#oracle #timestamp #sysdate

#Oracle #временная метка #sysdate

Вопрос:

Каков наилучший способ получить временную метку, состоящую из фактической даты, но фиксированной временной части в oracle.

например, сегодня и всегда 09:00:00

2020-10-20 09:00:00

в MSSQL я бы использовал FORMAT(GETDATE(),'yyyy-MM-dd 09:00:00')

Ответ №1:

Предполагая, что вы хотите a date , а не a varchar2 , я бы использовал

 trunc(sysdate)   interval '9' hour
  

trunc(sysdate) возвращает сегодня в полночь, а затем interval '9' hour добавляет 9 часов, чтобы дать вам 9 утра. Вы также можете добавить доли дня к a date , чтобы вы могли сказать

 trunc(sysdate)   9/24
  

Я склонен считать interval обозначения более понятными, особенно если вы работаете не с Oracle.

Ответ №2:

Вы можете использовать что-то вроде этого:

SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD';

 Session altered.
  

SQL> set head off

SQL> select sysdate||' 09:00:00' from dual;

 2020-10-19 09:00:00
  

Надеюсь, это то, что вы искали 🙂

Комментарии:

1. Это возвращает строку — я бы предложил TRUNC(SYSDATE) 9/24 , чтобы получить DATE значение