час должен быть между 0 и 23 - oracle - PullRequest
0 голосов
/ 27 апреля 2020

Я просто хочу объединить sysdate со строкой. я передаю sysdate в переменную in_date . После выполнения запроса, приведенного ниже,

`select to_date('''||in_date||''' || '14:59:59', 'dd-mon-yyyy hh24:mi:ss') from dual;

`я получаю ошибку ORA-1850: часы должны быть в диапазоне от 0 до 23

Я использую oracle 12 c.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Исходя из вашего собственного ответа, я предполагаю, что правильным решением будет одно из следующих:

SELECT TRUNC(SYSDATE) + INTERVAL '14:59:59' HOUR TO SECOND FROM dual;

SELECT TRUNC(SYSDATE) + 14/24 + 59/24/60 + 59/24/60/60 FROM dual;

SYSDATE - это значение DATE, вы должны никогда звонить TO_DATE() на значение, которое уже является DATE. Неявно Oracle делает это:

SELECT 
 TO_DATE(''|| 
 TO_CHAR(SYSDATE, SYS_CONTEXT('USERENV', 'NLS_DATE_FORMAT')) 
 ||'' || ' 14:59:59', 'dd-mon-yy hh24:mi:ss')  
FROM dual;

Таким образом, результат зависит от текущего сеанса пользователя NLS_DATE_FORMAT (а в вашем случае также от NLS_DATE_LANGUAGE), который может измениться в любое время.

0 голосов
/ 27 апреля 2020

Я пропустил пробел раньше времени, а также изменил формат 'yyyy' на 'yy'

select to_date(''||sysdate||'' || ' 14:59:59', 'dd-mon-yy hh24:mi:ss')  from dual;


27-04-2020 14:59:59

Спасибо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...