2016-04-01 7 views
0

У меня есть база данных звезды схемы с часом-Dimension (Time-размерностью), со следующими столбцами в нем:PLSQL: Запрос звезды схема время измерение без сохраненной даты

ID, ON_HOUR, ON_DAY, IN_MONTH, IN_YEAR 

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

Однако, сравнивая атрибут ON_DAY с интервалом дней и т. Д. С IN_MONTH и IN_YEAR, я часто могу достичь случая, когда я не получаю никаких данных, если интервал охватывает более нескольких месяцев. Таким образом, мне нужно преобразовать эти значения в метку времени, однако я запрашиваю в базе данных, так как я могу правильно сравнить мои данные с данными времени? У меня нет хранимой DATE или TIMESTAMP в базе данных - следует ли это изменить?

Прямо сейчас, мой лучший выбор что-то вроде этого:

to_timestamp('H.IN_YEAR-H.IN_MONTH-H.ON_DAY H.ON_HOUR:00:00', 'YYYY-MM-DD hh24:mi:ss') 

Это не похоже на работу, однако, и это также выглядит хитроумный, так что я не ожидал, что на ...

Каков наилучший способ получить записи в течение моего заданного интервала дат?

+0

Почему, по вашему мнению, вам нужна хранимая процедура? –

ответ

1

Кажется, что вы передаете литеральную строку в функцию timestamp - вам нужно передать значения в виде конкатенированной строки, используя функцию concat. Попробуйте приведенный ниже фрагмент кода

(H.IN_YEAR||H-IN_MONTH||H.ON_DAY||H.ON_HOUR,'YYYMMDDHH24') 
+0

Хороший улов .../ –

+0

Спасибо, с некоторыми изменениями, это сделал трюк. В вашей маске отсутствовала «Y», и на «H-IN_MONTH» была опечатка, которая должна быть, конечно, «H.IN_MONTH». – Kirluu