我有一个表格,其中有两列日期状态
Create table Status
(
date nvarchar(20),
Status bit
)
现在我想选择状态为false的记录和提交7天后的日期,就像今天我已经插入了两个错误状态的记录所以我希望查询在8-04-2015之后的7天后显示记录应显示状态为false的1-04-2015的所有记录。
如果你理解我的问题;请告诉我该怎么做。
答案 0 :(得分:3)
正如@gvee在上述评论中所述,您应将日期存储为DATE
或DATETIME
字段。这将允许您像这样查询:
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)
在很大程度上取决于您,您应该使用适当的数据类型存储数据,例如DATE
或DATETIME
。
您可以使用DATEDIFF()
查找两个日期之间的差异,以天/周/小时等为准。
SELECT *
FROM YourTable
WHERE [status] = 0
AND DATEDIFF(day,YourDate,GETDATE()) >=7
如果您无法修复数据结构,则必须在字符串日期的每次使用周围添加CAST()
或CONVERT()
:
CAST(YourDate AS DATETIME)