2015-04-01 119 views
-1

後,我在其中有兩列日期狀態提交日期7

Create table Status 
(
    date nvarchar(20), 
    Status bit 
) 

現在我要選擇其狀態=虛假和日期記錄後的7日內提交,就像如果我今天有插入表格兩個記錄有錯誤的狀態,所以我希望查詢在8-04-2015的7天后顯示記錄,1-04-2015的所有記錄都應該顯示狀態爲false。

如果您瞭解我的問題,請告訴做什麼。

+5

你** **需要將日期存儲爲日期,而不是作爲字符串。 – gvee 2015-04-01 16:19:34

+0

[不良習慣踢:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們所在的地方! – 2015-04-01 16:36:08

回答

3

正如@gvee在上面的評論中所述,您應該將日期存儲爲DATEDATETIME字段。這將允許您查詢,像這樣:

SELECT [date], [status] 
FROM <yourtable> 
WHERE [date] <= DATEADD(d, -7, GETDATE()) 
AND [status] = 0 

這會給你一個虛假的身份是7天或更舊的任何結果。

或者,您WHERE條款看起來是這樣的:

WHERE DATEDIFF(d, [date], GETDATE()) >= 7 
AND [status] = 0 

如果絕對必須讓你列NVARCHAR數據類型,根據您提供的日期格式,你可以把它CONVERTDATETIME像所以:

CONVERT(DATETIME, [date], 105) 

所以你WHERE條款是這樣的:

WHERE DATEDIFF(d, CONVERT(DATETIME, [date], 105), GETDATE()) >= 7 
AND [status] = 0 
+0

如何投射?我的日期是這樣的1-04-2015 – 2015-04-01 16:39:53

+0

'CONVERT(DATETIME,[date],105)'我會加到答案 – 2015-04-01 16:41:10

+0

謝謝先生...... – 2015-04-01 16:44:41

0
  1. 這麼多,因爲它取決於你,你應該使用正確的數據類型,如DATEDATETIME存儲數據。

  2. 您可以使用DATEDIFF()找到天/周/小時

    SELECT * 
    FROM YourTable 
    WHERE [status] = 0 
        AND DATEDIFF(day,YourDate,GETDATE()) >=7 
    

兩個日期之間的差值,等:如果你絕對不能修復的數據結構,你必須添加CAST()CONVERT()周圍的字符串日期的每個用法:

CAST(YourDate AS DATETIME)