0

我想取createDate30 天前的行并将位值更改IsExpired1. 我该如何做到这一点?

这是我尝试过的查询:

UPDATE [mydb].[dbo].[mytable] 
SET IsExpired = 1 
WHERE CreateDate > (time, SYSDATETIME(GETDATE(CreateDate)+30))

CreateDate列中datetime存储了一个来自 C# 项目的字符串。例如,存储在第一行的值是2013-05-29 14:59:48.000。当我在 SQL 中执行它时,我得到一个错误

消息 102,级别 15,状态 1,第 1 行
',' 附近的语法不正确。

4

4 回答 4

4

尝试这样的事情:

UPDATE [mydb].[dbo].[mytable] 
SET IsExpired = 1 
WHERE CreateDate < dateadd(dd, -30, getdate())
于 2013-07-01T18:53:58.107 回答
2

以下内容应与CreateDate字段在 SQL 服务器当前日期之前不到 30 天的情况下匹配。如果您将时间存储在 UTC 中,您可能需要使用GETUTCDATE() 。

UPDATE [mydb].[dbo].[mytable] SET IsExpired=1 
    WHERE CreateDate < DATEADD(DAY, -30, GETDATE())
于 2013-07-01T18:56:33.550 回答
2

试试下面的查询:

UPDATE [mydb].[dbo].[mytable] SET IsExpired=1 WHERE CreateDate < DATEADD(dd, -30, GETDATE())

此外,这篇文章将帮助您了解 DATEADD()。

首先,我假设 Skullomania 试图获得 30 天的 CreateDate。后来从斯科特张伯伦的评论中,我得到了用户的观点。

于 2013-07-01T18:54:06.420 回答
0

你可以试试:

UPDATE [mydb].[dbo].[mytable] 
SET IsExpired=1 
WHERE CreateDate = DATEADD(MONTH, -1, GETDATE())
于 2013-07-02T11:40:40.523 回答