7之后提交日期

时间:2015-04-01 16:17:19

标签: sql sql-server sql-server-2008

我有一个表格,其中有两列日期状态

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

现在我想选择状态为false的记录和提交7天后的日期,就像今天我已经插入了两个错误状态的记录所以我希望查询在8-04-2015之后的7天后显示记录应显示状态为false的1-04-2015的所有记录。

如果你理解我的问题;请告诉我该怎么做。

2 个答案:

答案 0 :(得分: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数据类型,并使用您提供的日期格式,您可以CONVERT将其DATETIME改为CONVERT(DATETIME, [date], 105)

WHERE

所以你的WHERE DATEDIFF(d, CONVERT(DATETIME, [date], 105), GETDATE()) >= 7 AND [status] = 0 子句看起来像这样:

{{1}}

答案 1 :(得分:0)

  1. 在很大程度上取决于您,您应该使用适当的数据类型存储数据,例如DATEDATETIME

  2. 您可以使用DATEDIFF()查找两个日期之间的差异,以天/周/小时等为准。

    SELECT *
    FROM YourTable
    WHERE [status] = 0
       AND DATEDIFF(day,YourDate,GETDATE()) >=7
    
  3. 如果您无法修复数据结构,则必须在字符串日期的每次使用周围添加CAST()CONVERT()

    CAST(YourDate AS DATETIME)