首页 > 解决方案 > 如何将 DATEDIFF 与驻留在报表查看器中的案例陈述中的设定天数进行比较

问题描述

我需要根据天气获取报告集中的列的特定输出,或者在运行报告时 Uf_RequestedShipDate 是 60 或更多过期日期。

到目前为止,我已经尝试过 Cast 和 Convert,我之前只是尝试将 DATEDIFF 输出与 60 进行比较,但我一直收到同样的错误。

, CASE
    WHEN co.Uf_RequestedShipDate = NULL THEN NULL
    WHEN CONVERT(INT, DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE())) <= CAST(60 AS INT) /*DATEADD(DAY, -60, @Today)*/ THEN co.Uf_RequestedShipDate + '****'
    WHEN CONVERT(INT, DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE())) > CAST(60 AS INT) /*DATEADD(DAY, -60, @Today)*/ THEN 'Pending ****'
    END AS 'RequestedShipDate'

如果数据库中有值,我只需要它输出带有 **** 的日期或使用 **** 挂起的日期,如果超过该日期超过 60 天,它将处于挂起状态,如果没有,那么它仍应显示日期。

示例:我在该列中有一个日期为 2019-03-30 的条目,它会将 2019-03-30 **** 发送到报告。

如果有一个有 2018-10-31,那么它只会在报告上显示 Pending ****。

如果它连续为空,那么它仍然只是空,并且报告没有 ****。

标签: sqlreporting-services

解决方案


你不能与 比较NULL=你必须使用IS NULL
您不需要将结果转换DATEDIFF()为整数,因为它是整数,所以60.
最后一个条件:> 60van 只检查语句ELSE中的一部分。 试试这个:CASE

CASE
  WHEN co.Uf_RequestedShipDate IS NULL THEN NULL
  WHEN DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE()) <= 60 
    THEN CONVERT(VARCHAR, co.Uf_RequestedShipDate, 120) + '****'
  ELSE 'Pending ****'
END AS RequestedShipDate

推荐阅读