2014-12-02 22 views
22

Ich kann nicht 30 Tage vom aktuellen Datum subtrahieren und ich bin ein Neuling für SQL Server.So subtrahieren Sie 30 Tage vom aktuellen Datum mit SQL Server

Das sind die Daten in meiner Spalte

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 

Für die obige Säule Schaffung ich varchar(50) verwendet und nun mein Problem ist, ich die Termine für die letzten 15-20 Tage ab dem Datum Spalte kann jemand angezeigt werden soll Hilfe bei diesem Problem? Update [Wie kann ich den letzten 7 Tagen angezeigt werden Daten, um

+8

[Schlechte Gewohnheiten zu treten: der falschen Datentyp wählen] (http: // sqlblog. com/blogs/aaron_bertrand/archive/2009/10/12/bad-gewohnheiten-zu-kick-mit-der-falschen-datentyp.aspx) - Sie sollten immer den am besten geeigneten Datentyp verwenden - das sind sie dort für, immerhin! Wenn Sie Daten speichern möchten, verwenden Sie 'DATE' oder' DATETIME2 (n) '- aber ganz sicher ** NOT ** eine' varchar'-Spalte! –

+0

hey es ist wirklich nützlich mann danke für die info und ich aktualisiere meine spalte – Madpop

Antwort

45

Sie können es auf datetime konvertieren und dann DATEADD(DAY, -30, date) verwenden.

Siehe here.

bearbeiten

ich viele Menschen finden, diese Frage zu vermuten, weil sie von aktuellem Datum subtrahieren wollen (wie der Titel der Frage, aber nicht das, was OP beabsichtigt). Der unten stehende Kommentar von munyul beantwortet diese Frage genauer. Da Kommentare ätherisch betrachtet werden (zu einem bestimmten Zeitpunkt gelöscht werden kann), werde ich wiederhole es hier:

DATEADD(DAY, -30, GETDATE()) 
+5

Danke. 'DATEADD (TAG, -30, GETDATE())' arbeitete wie ein Charme ... – munyul

+0

Einfach und brilliant! – Hans

+0

Für alle, die sich wundern, können Sie DAY in der Methode mit MONTH tauschen, um dasselbe für einen Monatsunterschied zu tun. Ich könnte mir vorstellen, dass ein gültiger Datetime-Wert funktionieren würde. – MattD

1
SELECT DATEADD(day,-30,date) AS before30d 
FROM... 

Aber es ist stark zu halt Datum in Datetime-Spalte empfohlen, nicht varchar.

7

try this:

Ihre VARCHAR Wert DATETIME- Cast und fügen -30 für die Subtraktion. Auch in SQL-Server wurde das Format Fr, 14 Nov 2014 23:03:35 GMT nicht zu DATETIME konvertiert. Versuchen Sie es String:

SELECT DATEADD(dd, -30, 
     CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
     AS DATETIME)) 
4

Try this:

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' 

Ergebnis Set:

———————– ————— 
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 
Verwandte Themen