后,我在其中有两列日期状态提交日期7
Create table Status
(
date nvarchar(20),
Status bit
)
现在我要选择其状态=虚假和日期记录后的7日内提交,就像如果我今天有插入表格两个记录有错误的状态,所以我希望查询在8-04-2015的7天后显示记录,1-04-2015的所有记录都应该显示状态为false。
如果您了解我的问题,请告诉做什么。
后,我在其中有两列日期状态提交日期7
Create table Status
(
date nvarchar(20),
Status bit
)
现在我要选择其状态=虚假和日期记录后的7日内提交,就像如果我今天有插入表格两个记录有错误的状态,所以我希望查询在8-04-2015的7天后显示记录,1-04-2015的所有记录都应该显示状态为false。
如果您了解我的问题,请告诉做什么。
正如@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-04-2015 – 2015-04-01 16:39:53
'CONVERT(DATETIME,[date],105)'我会加到答案 – 2015-04-01 16:41:10
谢谢先生...... – 2015-04-01 16:44:41
这么多,因为它取决于你,你应该使用正确的数据类型,如DATE
或DATETIME
存储数据。
您可以使用DATEDIFF()
找到天/周/小时
SELECT *
FROM YourTable
WHERE [status] = 0
AND DATEDIFF(day,YourDate,GETDATE()) >=7
两个日期之间的差值,等:如果你绝对不能修复的数据结构,你必须添加CAST()
或CONVERT()
周围的字符串日期的每个用法:
CAST(YourDate AS DATETIME)
你** **需要将日期存储为日期,而不是作为字符串。 – gvee 2015-04-01 16:19:34
[不良习惯踢:选择错误的数据类型](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