web-dev-qa-db-ja.com

SQL Serverを使用して現在の日付から30日を差し引く方法

現在の日付から30日を差し引くことができず、SQL Serverの初心者です。

これは私の列のデータです

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

上記の列を作成するためにvarchar(50)を使用しましたが、私の問題は、日付列から過去15〜20日間の日付を表示したいことです。更新[過去7日間の日付を順番に表示する方法

41
Madpop

これをdatetimeに変換してから、DATEADD(DAY, -30, date)を使用できます。

here を参照してください。

編集

多くの人がこの質問を見つけているのは、彼らが現在の日付から差し引くことを望んでいるからではないかと疑っています(質問のタイトルはそうですが、OPが意図したものではありません)。以下のmunyulのコメントは、その質問にさらに具体的に答えています。コメントはEthereal(任意の時点で削除される可能性がある)と見なされるため、ここで繰り返します。

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

これを試して:

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'

結果セット:

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

これを試して:

VARCHAR値をDATETIMEにキャストし、減算のために-30を追加します。また、sql-serverでは、フォーマットFri、14 Nov 2014 23:03:35 GMTはDATETIMEに変換されませんでした。部分文字列を試してください:

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...

ただし、varcharではなくdatetime列に日付を保持することを強くお勧めします。

2
i486