#sql #oracle11g
#sql #oracle11g
Вопрос:
Запрос, который выдает ошибку, является
SELECT hire_date sysdate from Employees;
Почему oracle не выполняет неявное преобразование DATE
в NUMBER
во время, hire_date sysdate
как это происходит во время hire_date-sysdate
. Это потому, что hire_date sysdate
это не имеет смысла? или что-нибудь еще.
Редактировать:-
Теперь я получил ответ, спасибо всем.
Комментарии:
1. каков желаемый результат?
2. Что для вас значит добавить две даты? Обычно это не имеет смысла. Что вообще означает 1 марта 2012 17 апреля 1842?
3. При вычитании одной даты из другой не происходит неявного «преобразования типа данных», как, например,:
hire_date - sysdate
. Это просто вычисляет количество дней между двумя датами. Дата ни во что не преобразуется. Но добавление двух дат не имеет смысла (как уже прокомментировал Джастин) — так же, как не имеет смысла умножение двух дат. Для деления одного на другое.4. @a_horse_with_no_name Но, как мы знаем, operator
-
принимает в качестве параметров толькоNumeric
тип данных, а правилом неявного преобразования данных oracle является «Когда вы используете функцию SQL или оператор с аргументом типа данных, отличным от того, который он принимает, Oracle преобразует аргумент в принятый тип данных» . Тогда почемуdate
не преобразовано вnumber
во время-
5.Нет. Оператор
-
определен для дат и временных меток. Иопределяется для комбинации дат / временных меток и интервалов. И при использовании с ними Oracle не преобразует значения в числа. Подробности смотрите в руководстве:docs.oracle.com/database/121/SQLRF/sql_elements001.htm#g196492
Ответ №1:
На самом деле идентификатор не имеет смысла.
Но запрос является :
add_months(hire_date,extract(year from sysdate)*12 extract(month from sysdate)) extract(day from sysdate)