我今天有数千条记录,但是在一天中的不同时段,我能够看到它们的唯一方法是,如果我按照ADDdate DESC进行订购
但是,我需要创建一个更新语句,我想使用带有日期的WHERE子句更新particulr字段
问题是,因为它们都是在不同的时间输入的,所以我怎么能够对这个字段进行CAST / CONVERT,这样我就可以做类似的......
基本上每个添加的记录都有一个日期时间格式的AddDate字段,我希望它转换为mm / dd / yyyy格式。
Update SpecialField
SET SpecialField = NULL
Where ADDdate = '09/18/2017'
请帮忙。感谢。
答案 0 :(得分:2)
如果您尝试更新ADDdate
在9月18日(无论时间)的所有记录,您可以执行以下操作:
UPDATE SpecialField, SpecialField2
SET SpecialField = NULL
WHERE ADDdate > '09/18/2017' AND ADDdate < '09/19/2017'
答案 1 :(得分:1)
您应始终使用标准日期格式。我更喜欢YYYY-MM-DD,虽然SQL Server略微偏爱YYYYMMDD。
以下是两种方式:
Update SpecialField
set SpecialField = NULL
where ADDdate >= '2017-09-18' and ADDdate < '2017-09-19';
第一个值为>=
,第二个值为<
。
或
Update SpecialField
set SpecialField = NULL
where cast(ADDdate as date) = '2017-09-18';
在这两种情况下,SQL Server都将使用索引,因此它们都是表达逻辑的合理方式。
如果您特别想要今天的日期,请使用getdate()
,例如:
Update SpecialField
set SpecialField = NULL
where cast(ADDdate as date) = cast(getdate() as date);
答案 2 :(得分:1)
如果这是经常要求,您可以根本不用担心输入日期。
where addDate >= cast(getdate() as date)
and addDate < dateadd(day, -1, cast(getdate() as date))
修改强>
这与戈登的答案有一些相似之处,因为它使用cast(getdate as date)
。不同之处在于他过滤了功能结果,这往往会降低性能。