2012-03-02 93 views
2

我試圖獲取當前日期 - 6天。這很容易。TSQl:選擇當前日期 - 6天,並將時間設置爲12:01上午

現在我試圖獲得當前日期 - 6天+ 12:01上午。

因此,如果今天是2012年3月2日上午11:14。

我想2012年2月25日上午12:01

這2個選擇會給我當前的日期 - 6,但時間不會恢復到上午12:01

  • 選擇getdate() - 6
  • SELECT DATEADD(day,-6,CURRENT_TIMESTAMP);
+0

您選擇的解決方案是最糟糕的解決方案 – 2012-03-05 08:50:49

回答

5

使用下面會給你的結果在datetime格式:

SELECT CAST(Convert(varchar(10), DateAdd(d, -6, getdate()), 101) 
     + ' 12:01 AM' as datetime) 

結果:2012-02-25 00:01:00.000

一旦你有你想要的日期時間,你可以將其轉換爲多種不同的格式。

或者你也可以做這在varchar格式如下:

select Convert(varchar(10), DateAdd(d, -6, getdate()), 110) + ' 12:01 AM' 

導致02-25-2012 12:01 AM

0
SELECT DATEADD(dd, -6, DATEDIFF(dd, 0, GETDATE())) + '12:01' 
+0

6天前你錯過了他想要的部分。 – brianmearns 2015-12-03 19:23:25

+0

所以我做到了。答覆已更新;謝謝@ sh1ftst0rm – Carl 2015-12-08 09:37:51

6
SELECT DATEADD(minute, 1, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 6, 0)) 

相當於

SELECT DATEADD(minute, 1, DATEADD(DAY, DATEDIFF(DAY, '19000101', GETDATE()) - 6, '19000101')) 

我認爲你會發現這個選項比varchar實現更快,更靈活。通過保持數據類型的原樣,您不必擔心cast/convert結果的變幻莫測。

見路易·戴維森爲全面解釋相關的一個: http://sqlblog.com/blogs/louis_davidson/archive/2011/02/09/some-date-math-fun.aspx

+0

+1比連接醜陋的字符串更清潔。我可能會避免'GETDATE() - 6',儘管爲了避免使日期延續,因爲這種方法不適用於SQL Server 2008中引入的新日期/時間類型。 – 2012-03-02 17:07:53

+0

將-6應用於偏移量,這已經是一個整數。這實際上突出了這種技術的一個主要缺點:括號太多。 – 2012-03-02 18:49:23

+0

是的,我知道在DATE變量中替換GETDATE()不會破壞這個特定的代碼,我只是認爲最好的做法是在日期數學中使用顯式DATEADD。如果你使用的是靜態日期而不是0,那麼可能會更清楚發生了什麼;我也使用0,但我試圖打破這種習慣。 – 2012-03-02 19:05:37

3

少了一個轉換是@Phil赫爾默的解決方案:

SELECT DATEADD(DAY, DATEDIFF(DAY, '19000101', GETDATE()), '1899-12-26T12:01:00') 

由於有些人顯然不知道這一切「向右」的在DATEADD/DATEDIFF對中指定的元素實際上取自右側常量。一切「向左」(包括實際元素)都可以用來實現抵消效應。

(以上左/右被假定整個日期時間值被解釋與年向左和毫秒到右側,與「尺寸」指令中的所有中間值)


編輯 - 我還更新了我的答案,將-6包含在右邊的值中。可以通過爲兩個常量選擇合適的值來創建各種偏移量。


在表達式中指定的兩個日期時間常量之間的關係應該表達出來,至少在用法的註釋旁邊。在上面,我使用1/1/1900作爲基點,並計算當時和現在之間的午夜過渡數(因爲DATEDIFF總是有效的)。然後,我在6天前的某個時間點(例如26/12/1899)在早上的00:01將這些天數加上...

+0

這正是我喜歡DADD解決方案的原因(OP:http://www.sqlservercentral.com/articles/Date+Manipulation/69694/),它非常靈活。可能是在「聰明」的某個點之後,日曆表具有一些優勢,但如果偏移,規則等容易發生變化,則DADD會再次出現。順便說一句,還應該注意的是,無論使用整理/本地化,他在這裏使用的日期文字格式的使用總是被解釋爲相同的(參見:http://social.msdn.microsoft.com/Forums/en/transactsql/螺紋/ d0f28d86-fea1-40f6-b982-65f6849b9eca) – 2012-03-03 03:36:56

相關問題