Преобразование даты для прямого SQL-запроса в OBIEE с использованием переменной представления - PullRequest
0 голосов
/ 10 сентября 2018

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

FYI: выбирается дата YYYY-MM-DD HH24: MI: SS в переменной представления, но формат даты в моем запросе - dd-mon-yy. Поэтому, когда мне нужно преобразовать значение переменной presntation в dd-mon-yy. OBIEE не нравится, когда я играю со значениями, а BI-сервер не позволяет мне просматривать сообщение об ошибке. У меня нет доступа для изменения формата на уровне сервера, поэтому мой единственный вариант - использовать формулы

Я новичок в представлении переменной. Также мне нужно, чтобы вы запомнили, если в приглашении не выбрана дата, я хочу, чтобы все значения возвращались

Код:

and 
   ( (       main_query.schd_compare >= (@{pv_task_sch_st_date}['@']{NVL(main_query.schd_compare,'None')})

        )
       AND (
            main_query.schd_compare  <= (@{pv_task_sch_end_date}['@']{NVL(main_query.schd_compare,'None')})
         ) ) 

Мне нужна помощь с синтаксисом для obiee

1 Ответ

0 голосов
/ 11 сентября 2018

Внутри базы данных не имеет значения, является ли дата "DD Mon YY" или "YYYY-MM-DD HH24: MI: SS". Это просто форматирование, и фактическое значение этой даты будет таким же. Так что, если обе «даты» на самом деле имеют тип данных date, то вы можете просто использовать что-то вроде:

....
AND ( 
   (       
     main_query.schd_compare >= NVL(pv_task_sch_st_date,main_query.schd_compare)
   )
   AND 
   (
     main_query.schd_compare  <= NVL(pv_task_sch_end_date,main_query.schd_compare)
   )
) 

Это если ваши pv_task_sch_???_date передаются как NULL значения, когда они не выбраны. Похоже, что Oracle действительно обрабатывает пустые строки и NULL то же самое в подобных сравнениях, но вам будет трудно отлаживать, если вы привыкнете полагаться на то, что NULL и '' одинаковы.

Что касается вашего запроса, я предполагаю, что ваши pv_task... значения фактически передаются вашему запросу в виде некой строки. Если это так, то вам нужно поместить TO_DATE() вокруг ваших pv_task... переменных.

Взгляните на https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=2066b2005a22769e785815f6b03750a1. Я рассмотрел несколько примеров того, как можно относиться к вашим датам.

Я уже говорил ранее, что базе данных не важно, в каком формате находится ваша дата. И она сохраняется одинаково, независимо от формата. Но когда вы используете TO_DATE() или другие подобные функции, Oracle хочет, чтобы вы указали правильную маску ваших данных. Если вы отправите «01 января 99» на TO_DATE(), Oracle необходимо знать, как интерпретировать это значение. Таким образом, вы говорите, что строка "DD Mon YY". Вы не можете сделать TO_DATE('2018-09-10','YYYY-MM-DD HH24:MI:SS'), потому что мои данные не содержат компонент времени. (я бы также предостерег от использования двухзначных лет.)

Кстати, я ненавижу свидания. И работа с датами в Oracle усиливает эту ненависть.

...