0

我正在尝试在日期过期时更新我的​​ SQL 数据库(即比现在少)我有这段可爱的 SQL 代码

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23 11:19:00 +0000' AS DATE)

但它会更新所有记录(即使日期不小于现在)

我也试过

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) < CAST('2012-08-23 11:19:00 +0000' AS DATE)

但这会影响任何行。

我想我有些困惑??

有什么帮助???

谢谢

4

2 回答 2

2

除了这一行,我看不出代码有什么奇怪的地方:

CAST('2012-08-23 11:19:00 +0000' AS DATE)

如果您用于将CAST()其更改为日期,则无需传入值的时间部分。

您没有提供完整的表架构,但要考虑的一件事是使用bit字段作为Y/N值。

这是一个代码工作的SQL Fiddle

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23' AS DATE)
于 2012-08-23T10:48:17.460 回答
0

您感到困惑的一件事是 SQL 中的类型。我不知道您使用的是什么数据库,但它可能具有布尔(或整数)和日期类型。将布尔值和日期存储为字符串是非常低效的。例如,即使您的示例确实有效,它也必须扫描整个数据库并转换每个值才能进行比较。

错误的线索是<vs <=。这暗示值相等。如果双方的强制转换都失败,并返回默认值零,那么将是相等的。

您应该更改架构以使用正确的类型,然后您的查询将起作用。

于 2012-08-23T10:44:06.373 回答