Sql 提交日期在7点之后
我有一个表,其中有两列日期状态Sql 提交日期在7点之后,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表,其中有两列日期状态 Create table Status ( date nvarchar(20), Status bit ) 现在,我想选择状态为false且提交7天后日期的记录,比如今天我插入了两条状态为false的记录,因此我希望查询显示2015年4月8日7天后的记录。状态为false的2015年4月1日的所有记录都应显示出来 如果你理解我的问题;请告诉我们该怎么做。正如@gvee在上面的评论中所说,您应该将日期存储为日期或日期时间字段。这将允许您这样查询:
Create table Status
(
date nvarchar(20),
Status bit
)
现在,我想选择状态为false且提交7天后日期的记录,比如今天我插入了两条状态为false的记录,因此我希望查询显示2015年4月8日7天后的记录。状态为false的2015年4月1日的所有记录都应显示出来
如果你理解我的问题;请告诉我们该怎么做。正如@gvee在上面的评论中所说,您应该将日期存储为
日期
或日期时间
字段。这将允许您这样查询:
SELECT [date], [status]
FROM <yourtable>
WHERE [date] <= DATEADD(d, -7, GETDATE())
AND [status] = 0
如果绝对必须将列保持为NVARCHAR
数据类型,使用您提供的日期格式,您可以将其转换为日期时间
,如下所示:
CONVERT(DATETIME, [date], 105)
因此,您的WHERE
子句如下所示:
WHERE DATEDIFF(d, [date], GETDATE()) >= 7
AND [status] = 0
WHERE DATEDIFF(d, CONVERT(DATETIME, [date], 105), GETDATE()) >= 7
AND [status] = 0
根据您的情况,您应该使用适当的数据类型存储数据,如DATE
或DATETIME
您可以使用DATEDIFF()
以天/周/小时等为单位查找两个日期之间的差异:
SELECT *
FROM YourTable
WHERE [status] = 0
AND DATEDIFF(day,YourDate,GETDATE()) >=7
如果绝对无法修复数据结构,则必须在每次使用字符串日期时添加CAST()
或CONVERT()
:
CAST(YourDate AS DATETIME)
您需要将日期存储为日期,而不是字符串。-您应该始终使用最合适的数据类型——毕竟,这就是它们的用途!怎么投?我的日期如下:1-04-2015CONVERT(DATETIME,[date],105)
我将添加到答案中。如果您已经解决了问题,请确保将您的问题标记为已回答。我强烈建议使用DATETIME
或DATE
格式,这将使您在将来处理日期时具有更大的灵活性。好的,我将在将来使用date或datetime谢谢againI想问一下,何时将数据类型设置为日期格式,然后在我的应用程序中插入d-MM-yyyy格式的日期,但sql显示的格式类似于yyyy-MM-dd。我有这样的更改cmd.Parameters.AddWithValue(“@Request\u Issue\u date”,sv.RequestIssue.ToString(“d-MM-yyyy”);但这给了我一个错误:将数据类型nvarchar转换为date时出错