2015-11-30 6 views
1

У меня есть запрос, что мне нужно вернуть: NIC, имя и возраст женского пола людей в возрасте от 10 до 15 лет или кто интерпретировал как минимум один характер в программе и родился до 2000 года Примечания: Вы можете использовать строитель присоединитьсяOracle: как получить возраст с годом рождения

столов являются:

людей -> НИК; имя ; Пол ; год рождения
толкование -> люди; программа; характер

Так что для этого сетевого адаптера, имени и возраста женского пола людей в возрасте от 10 до 15 лет я использую

SELECT to_char(sysdate,'YYYY')-p1.birth as age , p.nic , p.name 
FROM people p 
WHERE (p.gender ='F') 
AND (SELECT to_char(sysdate,'YYYY')-p1.birth as age 
    FROM people p1 
WHERE (p1.age BETWEEN 10 AND 15); 

или которые интерпретируются по крайней мере один символ в программе и родились до 2000 года

UNION 
Select * 
From interpret i , people p1 
Where (i.people = p1.nic) 
And(p1.character is not null) 
and (p1 < 2000); 

Но особенно на первом мире кода дает мне 2 основные ошибки в этом AND (SELECT to_char(sysdate,'YYYY')-p1.birth as age и в этом WHERE (p1.age BETWEEN 10 AND 15);

+0

попробовать to_number() вместо to_char() – blckbird

+0

Вы вычитанием 'date' из' string' - не очень разумная вещь, чтобы сделать. Если вы хотите разницу в днях между двумя 'date', просто вычтите их:' sysdate - p1.birth'. @blckbird: 'to_number()' в 'date' тоже будет не так –

+0

Вы хотите что-то подобное на втором выбрать? и p1.birth <2000 – Armin

ответ

0

Я вижу, что вам не хватает закрывающих круглых скобок.

попробовать этот код

SELECT to_char(sysdate,'YYYY')-p1.birth as age , p.nic , p.name 
FROM people p 
WHERE (p.gender ='F') 
AND p1.birth (SELECT to_char(sysdate,'YYYY')-p1.birth as age 
    FROM people p1 
WHERE (p1.age BETWEEN 10 AND 15)); 
Смежные вопросы