2015-04-01 121 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)