2015-04-23 2 views
0

Я пытаюсь найти возраст сотрудников из базы данных SAMPLE используя этот код:Ошибка с помощью DATEDIFF синтаксиса

SELECT 
    EMPNO, 
    FIRSTNME, 
    LASTNAME, 
    JOB, 
    BIRTHDATE, 
    DATEDIFF(HOUR,BIRTHDATE,GETDATE())/8766 AS AGE 
FROM EMPLOYEE 
WHERE JOB LIKE '%R'; 

, но я получаю сообщение об ошибке:

«час» не действует в контексте, где она используется .. SQLCODE = -206, SQLSTATE = 42703

Это использует IBM Data Studio 4.1.

ответ

0

Предполагая, что вы используете DB2, он не поддерживает DATEDIFF или GETDATE(). Вместо этого, просто вычитать даты и использовать CURRENT DATE:

SELECT EMPNO, FIRSTNME, LASTNAME, JOB, BIRTHDATE, 
    (CURRENT DATE - BIRTHDATE)/365.25 AS AGE 
FROM EMPLOYEE 
WHERE JOB LIKE '%R' 
+0

@GordonLinoff - я честно не был уверен, что с делением - 24 должны были пойти на вершину, и да, ваш правильно. Благодарю. – sgeddes

+0

Предполагается ли вывод отрицательного числа? Потому что это так. –

+0

Хорошо. Теперь выход возраста ушел. Для рождения 1977-05-17 он выдает 1016 для возраста. И как вы удаляете десятичные точки, чтобы выводить круглый номер? –

0

В DB2, результаты вычитания двух дат является длительность в виде `YYYYMMDD» Так, например, сегодня 23 апреля 2015 г. следующее:

select current_date - '1972-02-24' as myage 
from sysibm.sysdummy1      

возвращается: 430128
лет = 43
месяцев = 1
дней = 28

Так что вы хотите:

SELECT EMPNO, FIRSTNME, LASTNAME, JOB, BIRTHDATE, 
    int((CURRENT DATE - BIRTHDATE)/10000) AS AGE 
FROM EMPLOYEE 
WHERE JOB LIKE '%R' 
+0

И сегодня 24 апреля 2015 года пример запроса возвращает 430200. 43 года, 2 месяца, ноль дней. Продолжительность работы немного сложнее. Но это более точно .. – Charles

Смежные вопросы