Я пытаюсь выбрать из таблицы, используя переменные в разделе where 2 для фильтрации записей между диапазонами дат; две переменные имеют следующие значения:
START DATE: 31-MAR-2019 00:00:00 and END DATE: 17-FEB-2020 05:00:00
однако, если я использую переменные в предложении where как
value_dtime BETWEEN TO_DATE(Start_Date) AND TO_DATE(End_Date);
Я получаю неправильный набор данных, тогда как если я изменю предложение where следующим образом
value_dtime BETWEEN TO_DATE('31-MAR-2019 00:00:00') AND TO_DATE('17-FEB-2020 05:00:00');
я получаю правильный набор данных; ниже запроса, который я использую.
DECLARE
Start_Date VARCHAR(20):='31-MAR-2019 00:00:00';
End_Date VARCHAR(20):= TO_CHAR(sysdate,'DD-MON-YYYY') || ' 05:00:00' ;
BEGIN
DBMS_OUTPUT.PUT_LINE('START DATE: ' || Start_Date || ' and END DATE: ' || End_Date);
delete from inputs;
INSERT INTO inputs(dataset_id,asset_id,asset_name,value_numeric,added_by,value_date)
SELECT
1, --value from LOOK_DATASETS table
v.meas_ass_id ,
a.meas_id ,
v.numeric_value ,
v.mod_user,
v.value_dtime
FROM
halo.t_meas_value@LNKHALO v
JOIN halo.t_meas_ass@LNKHALO a ON a.ass_id = v.meas_ass_id
WHERE
value_dtime BETWEEN TO_DATE(Start_Date) AND TO_DATE(End_Date);
END:
может кто-нибудь, пожалуйста, скажите мне, как получить правильный набор данных, используя 2 переменные, а не жестко закодированные строки даты?
Я использую базу данных Oracle 12C и SQL Developer 19 в качестве IDE.
trunc(sysdate) + 5/24 + 30/(24 * 60)
, потому что в сутках 24 часа (это для 5/24), а в часе 60 минут (это для 30/(24 * 60)). 17.02.2020