Есть несколько вещей, которые могли бы быть неправильно. Первый - это то, что даты обычно находятся в заказе 2013-05-31
. Это может измениться в зависимости от настроек локали; допустим.
В противном случае, вам нужно написать запрос более просто:
SELECT clientid, clientname, startdate, enddate, age
FROM clients
WHERE clientid IN (1,2,3,4,5)
AND ((age > 10 AND enddate > '31-05-2013') OR (age <= 10))
Или, используя случай: (. По умолчанию без предложения ELSE является NULL)
SELECT clientid, clientname, startdate, enddate, age
FROM clients
WHERE clientid IN (1,2,3,4,5)
AND CASE
WHEN age > 10 THEN enddate > '31-05-2013'
ELSE TRUE
END
Это обычно хорошая практика, чтобы писать строковые литералы, которые будут преобразованы в даты в недвусмысленных форматах - это поможет предотвратить рабочие скрипты от взлома, если вы когда-либо работать на сервере с различными настройками по умолчанию , '' 20130531'' (например, 'YYYYMMDD' без разделителей) было бы однозначной версией выше. –
@ Downvoter: В чем проблема? – hims056