如何在我的where子句中将日期转换为mm / dd / yyyy

时间:2017-09-18 17:46:02

标签: sql sql-server date

我今天有数千条记录,但是在一天中的不同时段,我能够看到它们的唯一方法是,如果我按照ADDdate DESC进行订购

但是,我需要创建一个更新语句,我想使用带有日期的WHERE子句更新particulr字段

问题是,因为它们都是在不同的时间输入的,所以我怎么能够对这个字段进行CAST / CONVERT,这样我就可以做类似的......

基本上每个添加的记录都有一个日期时间格式的AddDate字段,我希望它转换为mm / dd / yyyy格式。

Update SpecialField
SET SpecialField = NULL
Where ADDdate = '09/18/2017'

请帮忙。感谢。

3 个答案:

答案 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)。不同之处在于他过滤了功能结果,这往往会降低性能。