在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是一个日期时间列。
答案 0 :(得分:3)
我认为问题是“2018-02-29”不是有效日期。今年2月只有28天。下一个闰年是2020年。
因此,如果您使用有效的日期进行比较,那么您应该没有问题。
如果要包含无效日期,则可以将比较作为字符串而不是日期进行。或者,您可以使用try_convert(date, '2018-02-29')
。这将返回NULL
。