Как передать строковую переменную внутри to_timestamp() в оракуле
У меня есть такой запрос:
select from_tz(to_timestamp(v_time,'YY-MM-DD HH24:MI:SS'), 'UTC')
at time zone 'America/New_York' from dual;
Если я использую строку Date вместо v_time, тогда она работает нормально. Но мне нужно передать переменную v_time внутрь to_timestamp, как я могу это сделать?
Заранее спасибо.
Полный код здесь:
DECLARE
v_test varchar2(200);
v_cur_time varchar2(200);
v_local_strem_time varchar2(200);
v_time varchar2(200);
v_time_diff NUMBER(20);
v_temp varchar2(200);
BEGIN
SELECT TO_CHAR(SYSDATE, 'DD-MON-YY HH24:MI:SS') into v_cur_time
FROM DUAL;
select substr(((select TO_CHAR(date_time,'YY-MM-DD HH24:MI:SS') from observation_measurement where observation_measurement_id=5777992)), 1,17)
into v_time from dual;
v_temp := v_time;
select from_tz(to_timestamp(v_temp,'YY-MM-DD HH24:MI:SS'), 'UTC')
at time zone 'America/New_York' into v_local_strem_time from dual;
select 24 * (to_date(v_cur_time, 'YY-MM-DD HH24:MI:SS')
- to_date(v_local_strem_time, 'YY-MM-DD HH24:MI:SS')) into v_time_diff
from dual;
DBMS_OUTPUT.PUT_LINE(v_time_diff);
END;
1 ответ
Переменная должна быть declared
(в code block
или в procedure
или в function
или т. д.)
declare
v_time varchar(20);
outval timestamp;
begin
v_time := '15-02-20 07:13:10';
select from_tz(to_timestamp(v_time,'YY-MM-DD HH24:MI:SS'), 'UTC')
at time zone 'America/New_York' into outval from dual;
dbms_output.put_line(outval);
end;
ВЫХОД: 20-ФЕВ-15 02.13.10.000000
РЕДАКТИРОВАТЬ ПОСЛЕ РЕДАКТИРОВАНИЯ ВОПРОС: проблема с v_local_strem_time
который содержит AMERICA/NEW_YORK
строка, одним из способов является использование SUBSTR
функция для удаления ненужной строки. позвольте мне проверить это:
Create table observation_measurement(
observation_measurement_id number,
date_time date
)
insert into observation_measurement
values (5777992,to_date('214/10/09', 'YY-MM-DD HH24:MI:SS'));
DECLARE
v_test varchar2(200);
v_cur_time varchar2(200);
v_local_strem_time varchar2(200);
v_time varchar2(200);
v_time_diff NUMBER(20);
v_temp varchar2(200);
BEGIN
SELECT TO_CHAR(SYSDATE, 'DD-MON-YY HH24:MI:SS') into v_cur_time
FROM DUAL;
select substr(((select TO_CHAR(date_time,'YY-MM-DD HH24:MI:SS') from observation_measurement where observation_measurement_id=5777992)), 1,17)
into v_time from dual;
v_temp := v_time;
select from_tz(to_timestamp(v_temp,'YY-MM-DD HH24:MI:SS'), 'UTC')
at time zone 'America/New_York' into v_local_strem_time from dual;
select 24 * (to_date(v_cur_time, 'YY-MM-DD HH24:MI:SS')
- to_date(substr(v_local_strem_time,0,18), 'YY-MM-DD HH24:MI:SS')) into v_time_diff
from dual;
DBMS_OUTPUT.PUT_LINE(v_time_diff);
END;
ВЫХОД: 143241
Также возможно тип данных observation_measurement.date_time
вашей структуры не дата, в то время вам может потребоваться сделать соответствующие преобразования.