Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как получить количество дней до даты SQL Access


Автор: ivanfr 3.10.2012, 07:39
Помогите разобраться с  формированием подобных запросов и написать запрос.
В продолжение темы http://forum.vingrad.ru/forum/topic-355083/kw-sql-Запрос-delphi-ado-связная.html

Задача следующая, есть таблица (Key_User), в которой есть столбец[Valid_to] с датой(окончание срока дейсвия сертификата), хочу получить информацию по всем ключам в таблице у которых срок окончания через (25, 24, 23, 22,.....1) дней сертификат закончит свое действие. Запросик я буду делать каждый день.
-------------------------------------------------------------------------------
№|serial nombe|....|   valid_to  | осталось дней до окончания|
-------------------------------------------------------------------------------
1 |123               |...|09.10.2012|                        6                      |
-------------------------------------------------------------------------------
2 |124               |...|15.10.2012|                        12                    |
-------------------------------------------------------------------------------
 
Смотрел в сети нашёл примеры но с датами рождения, не смог разобраться.
 
Привожу найденные примеры
Код

SELECT AD_User.Name, C_BPartner.Name, AD_User.Birthday,
31*(MONTHS_BETWEEN (CURRENT_DATE, AD_User.Birthday)-
12*(EXTRACT (YEAR FROM CURRENT_DATE)-EXTRACT (YEAR FROM AD_User.Birthday)-1)) FROM AD_User, C_BPartner
WHERE AD_User.C_BPartner_Id = C_BPartner.C_BPartner_Id
AND (31*(MONTHS_BETWEEN (CURRENT_DATE, AD_User.Birthday)-
12*(EXTRACT (YEAR FROM CURRENT_DATE)-EXTRACT (YEAR FROM AD_User.Birthday)-1)))<=7


Код

SELECT Дата from [Таблица] 
where (DateSerial(Year(Date()),Month(Дата),Day(Дата)) -Date() between 1 and  7)  or 
(DateSerial(Year(Date())+1,Month(Дата),Day(Дата)) -Date() between 1 and  7)


Код

SELECT name,birthday FROM main WHERE MONTH(birthday) = MONTH(CURRENT_DATE) AND DAYOFMONTH(birthday) > 
DAYOFMONTH(CURRENT_DATE) OR MONTH(birthday) = IF(MONTH(CURRENT_DATE) 1 = 13,1,MONTH(CURRENT_DATE) 1) AND 
DAYOFMONTH(birthday) < DAYOFMONTH(CURRENT_DATE)


Пытаюсь  составить запрос следеующим образом, но не получается
Код

  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='SELECT *'    
                                 +'FROM Key_User '
                                 +'WHERE MONTH(Valid_To) = MONTH(CURRENT_DATE) AND DAYOFMONTH(Valid_To) > DAYOFMONTH(CURRENT_DATE)'
                                 +'OR MONTH(Valid_To) = IF(MONTH(CURRENT_DATE) 1 = 25,1,MONTH(CURRENT_DATE) 1)'
                                 +'AND DAYOFMONTH(Valid_To) < DAYOFMONTH(CURRENT_DATE)';

  DataModule1.ADOQuery1.ExecSQL;

или с этим
Код

SELECT * from [Key_User] 
where (DateSerial(Year(Date()),Month(Valid_To),Day(Valid_To)) -Date() between 1 and  25)  or 
(DateSerial(Year(Date())+1,Month(Valid_To),Day(Valid_To)) -Date() between 1 and  25)

Прошу помощи с разъяснениям, почему у меня не получается? 

Автор: kami 3.10.2012, 09:40
Код

SELECT *, (ValidTo-DATE()) AS 'Дней осталось' FROM t1 WHERE (ValidTo-Date()) BETWEEN 1 and 25


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)