Как я могу преобразовать сложный sysdate + что-то еще с функцией to_date?

Немного застрял здесь. Скажем, я выполняю следующий SQL-запрос:

select to_char(sysdate, 'DD/MON/YY') || ' 15:32:00' from dual;

Результат дает мне следующее:

08/NOV/12 15:32:00

Теперь я хочу взять этот результат и использовать его в функции to_date (длинный рассказ о том, почему, но я расскажу подробнее через секунду):

select to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS') from dual;

Я ожидал, что результат будет таким же, как и предыдущий, но это не так. Вместо этого он дает мне это:

08/NOV/12

Вопрос в следующем: есть ли способ использовать конкатенацию to_char (sysdate, 'DD / MON / YY') и любую комбинацию HH24: MI: SS в to_date?

Дополнительная информация, которая может иметь или не иметь какое-либо дополнительное использование: причина, по которой мне нужно это сделать, заключается в том, что мне предоставили запрос, в котором есть таблица с временем SLA. Формат - это просто время в HH24: MI, однако это не тип DATETIME (я подозреваю, что это VARCHAR, но не могу сказать наверняка, поскольку это, вероятно, какое-то представление или функция, которую я не могу проанализировать. Частично из-за меня не зная, как это сделать, и частично из-за того, что я не имею необходимого доступа из-за моего пользователя БД.

РЕДАКТИРОВАТЬ: При повторном чтении вышеизложенного я понял, что упустил некоторые дополнительные детали (хотя это вообще не имеет отношения к моему вопросу, я думаю): я хочу взять сегодняшнюю дату (ДД / МЕС / ГГ), объединить это со временем SLA of HH: MI, объедините это с ': 00' для: SS, преобразуйте все это в дату, затем сравните полученную мерзость и время окончания для каждой возвращенной строки. Если время окончания больше / новее / позже, чем у моей комбинации-и-преобразование-делюкс, то верните что-то конкретное, а не верните что-то вроде «Все в порядке». Не уверен, имеет ли это смысл или нет, но в итоге я хочу получить что-то, что я могу использовать для сравнения с другим типом DATETIME, поэтому я думаю, что мне нужно как-то преобразовать время SLA в тип DATETIME.

Любая помощь по этому поводу будет принята с благодарностью.


person kooper    schedule 08.11.2012    source источник
comment
Какой клиент вы используете для этого? Он должен работать, demo,   -  person Ben    schedule 08.11.2012
comment
Привет, Бен, использую Oracle SQL Developer для тестирования. Я был почти уверен, что он должен работать нормально, но по какой-то странной причине он, кажется, просто отбрасывает бит после to_char (sysdate, 'DD / MON / YY'). РЕДАКТИРОВАТЬ: SQL Developer v. 2.1   -  person kooper    schedule 08.11.2012
comment
Параметры NLS разработчика sql находятся в разделе Инструменты ›Настройки› База данных ›Параметры NLS. также см. ответ ниже   -  person DazzaL    schedule 08.11.2012


Ответы (2)


вывод, который вы видите, преобразуется в формат символов. это продиктовано настройкой NLS_DATE_FORMAT. внутри дата по-прежнему будет иметь связанный формат времени. так сделайте это, чтобы увидеть это:

SQL> select sysdate from dual;

SYSDATE
---------
08-NOV-12

SQL> alter session set nls_date_format='dd/MON/yy hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
------------------
08/NOV/12 11:41:46
person DazzaL    schedule 08.11.2012
comment
DazzaL, молодец ты! :) Я не запускал сеанс изменения, но, основываясь на этом, я покопался в настройках SQL Developer и оказался в Инструменты ›Настройки› База данных ›NLS› Формат даты и изменил его с DD / MON / RR на DD / MON / RR HH24: MI: SS. Повторите мой запрос после этого, и вот, теперь он работает как шарм. Спасибо за быструю помощь, очень признателен. - person kooper; 08.11.2012

Формат даты по умолчанию - «ДД / ММ / ГГ». Если вы хотите отобразить компонент времени, вам нужно будет использовать правильный формат даты:

select to_char(to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS'),'DD/MM/YY HH24:MI:SS') from dual
person Rob van Laarhoven    schedule 08.11.2012
comment
Спасибо за это, мне не пришло в голову добавить еще одну функцию to_char. Теперь, после ваших ответов и ответов DazzaL, для меня это имеет гораздо больше смысла, кажется, мне удалось просто преобразовать его в тип DATETIME, но он просто не показывал то, что я хотел, хотя он был там. - person kooper; 08.11.2012