risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come sottrarre 30 giorni dalla data corrente utilizzando SQL Server

Non riesco a sottrarre 30 giorni dalla data corrente e sono un novizio di SQL Server.

Questi sono i dati nella mia colonna

date 
------------------------------
Fri, 14 Nov 2014 23:03:35 GMT
Mon, 03 Nov 2014 15:18:00 GMT
Tue, 11 Nov 2014 01:24:47 GMT
Thu, 06 Nov 2014 19:13:47 GMT
Tue, 04 Nov 2014 12:37:06 GMT
Fri, 1 Nov 2014 00:33:00 GMT
Sat, 5 Nov 2014 01:06:00 GMT
Sun, 16 Nov 2014 06:37:12 GMT

Per creare la colonna sopra ho usato varchar(50) e ora il mio problema è che voglio visualizzare le date degli ultimi 15-20 giorni dalla colonna della data qualcuno può aiutare con questo problema? aggiornamento [come posso visualizzare le date degli ultimi 7 giorni in ordine

41
Madpop

È possibile convertirlo in datetime, quindi utilizzare DATEADD(DAY, -30, date).

Vedi qui .

modifica

Ho il sospetto che molte persone stiano trovando questa domanda perché vogliono sottrarre dalla data corrente (come è il titolo della domanda, ma non ciò che l'OP intendeva). Il commento di Munyul di seguito risponde a questa domanda in modo più specifico. Poiché i commenti sono considerati Ethereal (possono essere eliminati in qualsiasi momento), lo ripeterò qui:

DATEADD(DAY, -30, GETDATE())
95
HoneyBadger

Prova questo:

SELECT      GETDATE(), 'Today'
UNION ALL
SELECT      DATEADD(DAY,  10, GETDATE()), '10 Days Later'
UNION ALL
SELECT      DATEADD(DAY, –10, GETDATE()), '10 Days Earlier'
UNION ALL
SELECT      DATEADD(MONTH,  1, GETDATE()), 'Next Month'
UNION ALL
SELECT      DATEADD(MONTH, –1, GETDATE()), 'Previous Month'
UNION ALL
SELECT      DATEADD(YEAR,  1, GETDATE()), 'Next Year'
UNION ALL
SELECT      DATEADD(YEAR, –1, GETDATE()), 'Previous Year'

Set di risultati:

———————– —————
2011-05-20 21:11:42.390 Today
2011-05-30 21:11:42.390 10 Days Later
2011-05-10 21:11:42.390 10 Days Earlier
2011-06-20 21:11:42.390 Next Month
2011-04-20 21:11:42.390 Previous Month
2012-05-20 21:11:42.390 Next Year
2010-05-20 21:11:42.390 Previous Year
7
Muhammad Awais

PROVA QUESTO:

Trasmetti il ​​tuo valore VARCHAR su DATETIME e aggiungi -30 per la sottrazione. Inoltre, in sql-server il formato ven, 14 nov 2014 23:03:35 GMT non è stato convertito in DATETIME. Prova la sottostringa per questo:

SELECT DATEADD(dd, -30, 
       CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
       AS DATETIME))
7
Veera
SELECT DATEADD(day,-30,date) AS before30d 
FROM...

Ma si consiglia vivamente di mantenere la data nella colonna datetime, non varchar.

2
i486