SQL: Как данные текущей даты из поля отметки времени в oracle? - PullRequest
2 голосов
/ 06 февраля 2020

Как получить данные текущей даты из поля отметки времени в oracle?

select
 jobstatus0_.JOBNAME as JOBNAME1_21_,
 jobstatus0_.STARTDATE as STARTDATE2_21_,
 jobstatus0_.ENDDATE as ENDDATE3_21_,
 jobstatus0_.REMARKS as REMARKS4_21_,
  jobstatus0_.STATUS as STATUS5_21_
 from
   PD_OWNER.CIM_SNOW_JOB_STATUS_TAB jobstatus0_
  where
 jobstatus0_.JOBNAME='AGREEMENTS'
 AND jobstatus0_.STARTDATE=sysdate <-- Not working with this

Нам не нужно учитывать время, а только дату

Я пробовал следующее, но оно также не работает .

and cast(jobstatus0_.STARTDATE as date)=sysdate

Также используется, который работал

AND  to_date(to_char(jobstatus0_.STARTDATE,'DD-MON-YYYY'))=to_date(to_char(sysdate,'DD-MON-YYYY'));

, но хотите более элегантный способ.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020

Вы можете использовать функцию TRUN C (дата)

Цель

Функция TRUN C (дата) возвращает дату с временной частью день, усеченный до единицы, заданной моделью формата fmt. Возвращаемое значение всегда имеет тип данных DATE, даже если для даты указан другой тип данных datetime. Если вы опустите fmt, то дата усекается до ближайшего дня. Пожалуйста, обратитесь к "ROUND и TRUN C Функции даты" для моделей разрешенного формата для использования в fmt.

Примеры

В следующем примере дата усекается:

SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')
  "New Year" FROM DUAL;

New Year
---------
01-JAN-92 
2 голосов
/ 06 февраля 2020

Если столбец STARTDATE равен DATE (или TIMESTAMP), вы можете обрезать его (а также SYSDATE) и получить

and trunc(jobstatus0_startdate) = trunc(sysdate)

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

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select trunc(sysdate) trd,
  2         trunc(systimestamp) trt
  3  from dual;

TRD                 TRT
------------------- -------------------
06.02.2020 00:00:00 06.02.2020 00:00:00

SQL>

Хотя, если в этом столбце был индекс, его усечение сделает индекс непригодным для использования, но это другая история, и существует обходной путь (индекс на основе функции или создание значения столбца между ними). sysdate в это и следующее полночь).

0 голосов
/ 06 февраля 2020

В postgresql / mysql используйте как показано ниже

date(jobstatus0_.STARTDATE)=date(now())

В sql -сервер

cast(jobstatus0_.STARTDATE as date)=cast(CURRENT_TIMESTAMP as date)
...