Member 13536981 Ответов: 1

Почему этот код не является executint


-- 2/.Найдите всех сотрудников мужского пола, родившихся с 1962 по 1970 год, и дату их найма, превышающую 2001 год
----и все служащие женского пола, родившиеся в период с 1972 по 1975 год и нанятые в период с 2001 по 2002 год.

выбирать*
С[См.].[Работник]
Где [Пол]='М' и Год([Дата рождения]) между 1962 и 1970 годами
и год([HireDate])>2001 и
[Пол]='F' и Год([Дата рождения]) между 1972 и 1975 годами
и год([HireDate])между 2001 и 2002 годами

Что я уже пробовал:

выбирать*
С[См.].[Работник]
Где [Пол]='М' и Год([Дата рождения]) между 1962 и 1970 годами
и год([HireDate])>2001 и
[Пол]='F' и Год([Дата рождения]) между 1972 и 1975 годами
и год([HireDate])между 2001 и 2002 годами

Laxmidhar tatwa technologies

тип данных даты рождения в этом случае должен быть int

1 Ответов

Рейтинг:
2

OriginalGriff

Потому что и требует, чтобы обе стороны выражения были истинными, чтобы результат был истинным.
Давайте немного упростим ваш запрос:

SELECT  *  FROM [HumanResources].[Employee]
WHERE [Gender]='M' AND [Gender]='F'
Поскольку пол не может быть одновременно и M, и F, никакие строки не возвращаются.
Я подозреваю, что вы хотите что-то вроде этого:
SELECT * FROM [HumanResources].[Employee]
WHERE 
   (    [Gender]='M' 
    AND YEAR([BirthDate]) BETWEEN 1962 AND 1970 
    AND YEAR([HireDate]) >2001
   ) OR
   (    [Gender]='F'
    AND YEAR([BirthDate]) between 1972 and 1975
    AND YEAR([HireDate])between 2001 and 2002
   )