26

我试图在 sql 语句中获取明天的日期以进行日期比较,但它不起作用。

下面是我的代码:

select * 
from tblcalendarentries
where convert(varchar,tblcalendarentries.[Start Time],101) 
      = convert(varchar, GETDATE() +1, 101)
4

4 回答 4

42

要获取明天的日期,您可以使用以下代码将 1 天添加到当前系统日期:

SELECT DATEADD(day, 1, GETDATE())

获取日期()

将当前数据库系统时间戳作为日期时间值返回,不带数据库时区偏移量。此值源自运行 SQL Server 实例的计算机的操作系统。

DATEADD(日期部分,数字,日期)

返回指定的日期,并将指定的数字间隔(有符号整数)添加到该日期的指定日期部分。

因此,将其添加到WHERE子句中的代码中:

WHERE CONVERT(VARCHAR, tblcalendarentries.[Start Time], 101) = 
      CONVERT(VARCHAR, DATEADD(DAY, 1, GETDATE()), 101);

首先,GETDATE()将以以下格式为您提供今天的日期:

2013-04-16 10:10:02.047

然后使用DATEADD(), 允许您从指定日期添加(或根据需要减去)日期或时间间隔。所以间隔可以是:年、月、日、小时、分钟等。

使用时区?

如果您正在使用跨时区的系统,您可能还需要考虑使用GETUTCDATE()

GETUTCDATE()

以日期时间值的形式返回当前数据库系统时间戳。不包括数据库时区偏移量。此值表示当前的 UTC 时间(协调世界时)。此值源自运行 SQL Server 实例的计算机的操作系统。

于 2013-04-16T10:00:40.297 回答
6

Try the below:

SELECT GETDATE() + 1

This adds one day to current date

于 2013-04-16T10:03:38.273 回答
2

Specify size of varchar in convert()

where convert(varchar(11),tblcalendarentries.[Start Time],101) = convert(varchar(11), GETDATE() +1, 101)
于 2013-04-16T10:02:07.523 回答
1

我会写:

where
  DATEADD(day,DATEDIFF(day,0,tblcalendarentries.[Start Time]),0) =
  DATEADD(day,DATEDIFF(day,0,GETDATE()),1)

这避免了将日期完全转换为字符串,同时也从两个值中删除了时间部分。

于 2013-04-16T10:21:31.337 回答