昨天在 SQL 服务器中变成 YYYYMMDD 格式
Yesterday into YYYYMMDD format in SQL Server
我希望为我已经表现不佳的 SQL 代码添加一个条件。我想添加一个过滤器,其中日期 = 昨天(数据类型为 INT
)。
例如
Select *
From table
Where Date = 20190930
如何使用 GETDATE() - 1
执行此操作?
这是您的问题。
首先,您需要先将 int
日期转换为 varchar
,然后再转换为 datetime
,以避免在转换过程中出现算术流错误。
其次,您需要将 getdate() - 1
转换为 date
以截断时间以匹配您的日期字段。
select *
from table
where cast((cast(date as varchar(8))as datetime) = cast(getdate() - 1 as date)
或
select *
from table
where cast((cast(date as varchar(8)) as date) = cast(dateadd(day,datediff(day,1,GETDATE()),0) as date)
我们需要非常清楚您使用的数据类型。
如果您有一个简单的 date
值(没有时间组件作为数据类型的一部分),事情就很简单了:
Select *
from table
where Date = DATEADD(day, -1, cast(current_timestamp as date))
如果您有 DateTime
或 DateTime2
值,请务必了解所有 DateTime
值都有一个时间组件,一直到毫秒。即使您希望时间分量始终在午夜或接近午夜时也是如此。这会使直接相等比较变得困难。相反,您几乎总是需要在特定的 range:
范围内进行检查
Select *
from table
where Date >= DATEADD(day, -1, cast(current_timestamp as date))
AND Date < cast(current_timestamp as date)
我希望为我已经表现不佳的 SQL 代码添加一个条件。我想添加一个过滤器,其中日期 = 昨天(数据类型为 INT
)。
例如
Select *
From table
Where Date = 20190930
如何使用 GETDATE() - 1
执行此操作?
这是您的问题。
首先,您需要先将 int
日期转换为 varchar
,然后再转换为 datetime
,以避免在转换过程中出现算术流错误。
其次,您需要将 getdate() - 1
转换为 date
以截断时间以匹配您的日期字段。
select *
from table
where cast((cast(date as varchar(8))as datetime) = cast(getdate() - 1 as date)
或
select *
from table
where cast((cast(date as varchar(8)) as date) = cast(dateadd(day,datediff(day,1,GETDATE()),0) as date)
我们需要非常清楚您使用的数据类型。
如果您有一个简单的 date
值(没有时间组件作为数据类型的一部分),事情就很简单了:
Select *
from table
where Date = DATEADD(day, -1, cast(current_timestamp as date))
如果您有 DateTime
或 DateTime2
值,请务必了解所有 DateTime
值都有一个时间组件,一直到毫秒。即使您希望时间分量始终在午夜或接近午夜时也是如此。这会使直接相等比较变得困难。相反,您几乎总是需要在特定的 range:
Select *
from table
where Date >= DATEADD(day, -1, cast(current_timestamp as date))
AND Date < cast(current_timestamp as date)