вычесть дату из столбца sql - PullRequest
1 голос
/ 21 октября 2011

нужна ваша помощь снова

у меня есть таблица sql со столбцом docid, proposedcompletiondate, docstatus

doc_id     ProposedCompdate    Docstatus
0001         2011-10-30           A
0002         2011-11-29           C
0003         2011-10-31           C
0004         2011-10-30           A
0005         2011-10-30           C
0006         2011-10-28           C
0007         2011-10-25           A
0008         2011-10-30           C

Теперь я хочу написать запрос для получения результатовс Docstatus 'A', чья дата при вычитании из 9 дней должна быть текущей датой

, например, если сегодняшняя дата '21 -10-2011 '

, результирующий набор должен быть

doc_id     ProposedCompdate    Docstatus
0001         2011-10-30           A
0004         2011-10-30           A

Ответы [ 4 ]

1 голос
/ 21 октября 2011

Предполагается, что Microsoft SQL Server, но ваше предложение where будет:

where Docstatus = 'A' AND DateDiff(day, GETDATE(), ProposedComplete) = 9

Функция DateDiff принимает параметр измерения (день, год и т. Д.), Дату начала и дату окончания и возвращает целое число. Таким образом, разница между сегодняшним днем ​​и ProposedComplete должна составлять 9 дней.

1 голос
/ 21 октября 2011

Пожалуйста, используйте DATEADD Функция SQL SERVER , где вы можете добавить или вычесть дату.

например,

SELECT DATEADD(day,-9, '2006-06-01') as date_diff;

СогласноВаш вопрос, запрос может выглядеть следующим образом:

SELECT DATEADD(day,-9, 
   (SELECT ProposedCompdate  FROM Table_name where Docstatus = 'A')) 
AS "-9 Days";

Подробнее о функции DATEADD читайте здесь здесь !!

0 голосов
/ 21 октября 2011

Отлично работает sql server 2008

CREATE TABLE #Docs (doc_id varchar(10), ProposedCompdate date,Docstatus  nvarchar(50))

INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0001,'2011-10-30','A')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0002,'2011-11-29','C')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0003,'2011-10-31','C')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0004,'2011-10-30','A')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0005,'2011-10-30','C')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0006,'2011-10-28','C')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0007,'2011-10-25','A')
INSERT INTO #Docs(doc_id, ProposedCompdate, Docstatus) VALUES(0008,'2011-10-30','C')

SELECT * FROM #Docs WHERE CONVERT(DATE, DATEADD(D, 9, GETDATE())) = ProposedCompdate AND Docstatus = 'A'

DROP TABLE #Docs
0 голосов
/ 21 октября 2011
select doc_id,ProposedCompdate,Docstatus from tableName where convert(varchar(20),ProposedCompdate,101) = convert(varchar(20),dateadd(d,9,getdate()),101) 
and Docstatus='A'
...