使用CONVERT检查特定日期,如果日期不存在,则导致转换失败

时间:2018-03-22 18:11:27

标签: sql sql-server

在SQL Server中,我正在编写一个查询来计算某些用户事件之间的时间,为此,我需要为事件的设置天数运行聚合查询。一个事件可以在多天运行,对于我用来验证我的查询的数据,有2月27日,2月28日的数据,但事件发生在2月25日 - 3月1日。

我只使用数据的一个子集来验证查询,会有更多数据匹配更多天或更少天。

所以我试图在我的查询中添加一个IF检查,只有在特定日期存在数据时才运行聚合,如下所示:

IF EXISTS(SELECT 1 FROM sourcedata SD 
          JOIN @dwellTime DT ON SD.badgeid = DT.badgeid 
          WHERE SD.eventid = 1234 
          AND CONVERT(date, SD.DateAdded, 110) = '2018-02-29')

但正如我所说,我的@dwellTime数据没有第29个数据,当它尝试进行转换时,没有数据可以转换,我收到了

Conversion failed when converting date and/or time from character string.

错误。

如何检查数据中的特定日期?

DateAdded是一个日期时间列。

1 个答案:

答案 0 :(得分:3)

我认为问题是“2018-02-29”不是有效日期。今年2月只有28天。下一个闰年是2020年。

因此,如果您使用有效的日期进行比较,那么您应该没有问题。

如果要包含无效日期,则可以将比较作为字符串而不是日期进行。或者,您可以使用try_convert(date, '2018-02-29')。这将返回NULL