pst.setString(2, addDate);
Я думаю, что это должно быть изменено на:
pst.setString(1, addDate);
, потому что у вас есть только один параметр в вашем подготовленном утверждении.
Кроме того, при сравнении дат необходимо заключать их в одинарные кавычки, поэтому также необходимо изменить строку UpdateQuery на
"UPDATE company SET permission = '"+Allow+"' WHERE date < '?' ";
.
Проверьте эту статью: Как вычислить возраст человека, использующего коды SQL
Вот код от статьи:
DECLARE @BirthDate DATETIME
DECLARE @CurrentDate DATETIME
SELECT @CurrentDate = '20070210', @BirthDate = '19790519'
SELECT DATEDIFF(YY, @BirthDate, @CurrentDate) - CASE WHEN( (MONTH(@BirthDate)*100 + DAY(@BirthDate)) > (MONTH(@CurrentDate)*100 + DAY(@CurrentDate)) ) THEN 1 ELSE 0 END
Существует иначе, который немного более прост:
Select CAST(DATEDIFF(hh, [birthdate], GETDATE()) / 8766 AS int) AS Age
Поскольку округление здесь очень детализировано, это почти совершенно точно. Исключения являются столь замысловатыми, что они являются почти юмористическими: каждый четвертый год возвращенный возраст будет одним годом, слишком молодым, если мы A) просим возраст до 6:00, B) в день рождения человека и C) их день рождения после 28-го февраля. В моей установке это - совершенно приемлемый компромисс.