-2

我一直认为,当存储过程带回一个空日期时间时,SSRS 报告会在该单元格中显示 Mindate。问题是,根据我的经验,这并不总是正确的。我不知道为什么。有时报告会显示空白,有时会提示空日期时间。这是为什么?

是否有解释其工作原理的规则或文档(有意义)?当您使用的工具不一致时,很难保持一致。我可以制作两个设置完全相同的报告。一个将显示 mindate,一个将显示空日期时间为空白。我不明白。

编辑:

首先,是的,很多人都发生过头脑清醒的事情。 https://www.google.com/search?num=50&q=ssrs+null+date+show+blank&oq=ssrs+null+date+show+blank&gs_l=serp.3...8759.9774.0.9941.10.10.0.0。 0.0.152.888.8j2.10.0....0...1c.1.25.serp..8.2.166.kl2WBVx4Ijw

几乎每个结果都会有人在他们想要空白时谈论思维导图。许多结果来自 Stack Overflow,所以在你开始告诉我它永远不会发生之前,请意识到你完全错了。你可能从未见过它。在我多年的饮食和数千顿饭中,我从未在食物中看到过断指。不代表没有人发生过......

显示最小日期的示例:

在报告中,文本框的表达式为:

=Fields!SecondaryInjuryRecordDate.Value

在占位符属性窗口中,数字格式设置为 Date->01/31/2000。很简单,没有什么奇怪的事情发生。正确的?

在 proc 中,该列的代码是:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate

这导致每当 SecondaryInjuryDXDate 为空时都会显示 Mindate。我不得不切换到这个:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE ISNULL(l.SecondaryInjuryDXDate, '') END AS SecondaryInjuryRecordDate

...当日期为空时得到空白。

SecondaryInjuryDXDate 是 DATETIME,而 SecondaryInjury 有点。

4

5 回答 5

2

在 SSRS 中,默认情况下,NULL DateTime 值将表示为空字符串。

如果将数据格式应用于该值,则将使用 MIN DateTime 值代替空值,例如:将 DateTime 转换为 ShortDate,如下所述:

在占位符属性窗口中,数字格式设置为 Date->01/31/2000。很简单,没有什么奇怪的事情发生。正确的?

为避免这种情况,必须将列值包装在表达式中以有条件地应用所需的格式:

=IIf(IsNothing(Fields!DateTimeField.Value), "", FormatDateTime(Fields!DateTimeField.Value, DateFormat.ShortDate))
于 2017-09-26T14:13:25.647 回答
1

在文本框表达式中使用类似的东西:

=IIf(IsNothing(Fields!DateTime.Value), "", Fields!DateTime.Value)
于 2013-08-19T15:21:24.007 回答
1

似乎没有关于此的文档。下一个最好的事情是让这个问答记录基于我们的集体经验。

假设问题:“在显示具有 NULL 值的 DATETIME 时 SSRS 会做什么? ”...

...答案是它将显示一个空字符串。没有可重现的场景,即 NULL 值将显示为其他任何内容,除非您自己为此做一些工作,例如:

  • 如果查询将 NULL 合并为其他内容,例如字符串“NULL”或 MIN DATETIME;
  • 如果您有文本框值的表达式,例如IIF(Fields!MyDateTime.Value Is Nothing, "01-01-1900", Fields!MyDateTime.Value)
于 2013-08-20T09:57:04.717 回答
1

SQL 查询中返回的每个字段都会分配一个数据类型。通常,您希望将返回的日期保留为 SQL 中的日期,而不是字符串。(不要在 SQL 中将日期格式化为字符串。尽可能靠近表示层。)

因此,而不是在您的查询中:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN '' ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate

我会尝试使用:

CASE WHEN ISNULL(l.SecondaryInjury, 0) = 0 THEN CAST( NULL AS DateTime ) ELSE l.SecondaryInjuryDXDate END AS SecondaryInjuryRecordDate

请参阅SQL cast datetime以了解为什么您将 0 转换为日期。

于 2013-08-21T15:04:16.903 回答
0

我确实发现当我格式化整个列时,例如 FormatDateTime(field, DateFormat.ShortDate) - SSRS 会将空白字段格式化为 01/01/0001。仅供参考。

于 2020-03-26T14:11:07.360 回答