Вычитая дату, чтобы получить разницу в годах - PullRequest
0 голосов
/ 08 ноября 2018

Здравствуйте, evreryone Я пытался вычесть две даты, чтобы получить разницу в годах.

select round(date '99-11-05' - date '69-05-21')/365 from dual;

это работает нормально, так как я получаю вывод 30.47945205479452054794520547945205479452.

У меня есть таблица RAP07, в которой у меня есть два поля даты BIRTHDT_T и SPRODT_T, если я вычитаю оба значения, чтобы получить возраст человека в годах.

Я пробовал ниже запрос:

select round(date BIRTHDT_T - date SPRODT_T)/365 from rap07;

Но я получил ошибку «ORA-00936: отсутствует выражение» Не могли бы вы помочь мне в этом.

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

Тебе лучше использовать

TRUNC(MONTHS_BETWEEN(SPRODT_T, BIRTHDT_T)/12)

FLOOR(...) вместо TRUNC(...) делает то же самое.

В противном случае вы можете получить неправильные результаты, например, для этого:

ROUND(DATE '2018-02-28' - DATE '2010-03-01')/365 -> 8.0027397260274
0 голосов
/ 08 ноября 2018

При первом выборе вы получаете только один результат, который возвращается нормально. Во втором запросе вы пытаетесь получить столбец с результатами, который выдает ошибку, поскольку вы не назвали столбец. Также вы используете ключевое слово date в обоих запросах. Это ключевое слово используется только при создании новой даты, а не при ее разрешении. Попробуйте, если этот запрос работает:

SELECT ROUND(BIRTHDT_T - SPRODT_T)/365 AS years FROM rap07;
0 голосов
/ 08 ноября 2018

Прежде всего, вы не можете использовать «дату» перед уже определенным столбцом из таблицы . Вот почему вы получаете эту ошибку.

Вариант 1

В Oracle есть функция, которая может извлечь год из столбца типа данных даты (EXTRACT(YEAR FROM COLUMN))

select round(EXTRACT(YEAR FROM BIRTHDT_T) - EXTRACT(YEAR FROM SPRODT_T)) from rap07;

Так что вам на самом деле не нужно ничего делить и округлять.

Вариант 2

Если вы все еще хотите использовать упомянутое вами выражение (без EXTRACT), вы можете сделать это следующим образом:

select round(BIRTHDT_T - SPRODT_T)/365 from rap07;
0 голосов
/ 08 ноября 2018

Вы можете попробовать ниже

DEMO

select floor(months_between(date SPRODT_T, date BIRTHDT_T) /12) from rap07;

ВЫВОД:

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