SSRS和null日期时间

时间:2013-08-19 14:33:16

标签: reporting-services

我一直认为,当存储过程带回一个空的日期时间时,SSRS报告会在该单元格中显示出注意。问题是,根据我的经验,这并非总是如此。我无法弄清楚为什么。有时,报告将显示空白,有时会考虑空日期时间。这是为什么?

是否有解释其工作原理的规则或文档(有意义)?当您使用的工具不一致时,很难保持一致。我可以制作两个完全相同的报告。一个将显示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。 很简单,没有什么奇怪的事情发生在那里。 RIGHT?

在proc中,该列的代码是:

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

这导致在SecondaryInjuryDXDate为null时显示。我不得不改用这个:

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

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

SecondaryInjuryDXDate是DATETIME和 SecondaryInjury有点。

5 个答案:

答案 0 :(得分:2)

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

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

  

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

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

=IIf(IsNothing(Fields!DateTimeField.Value), "", FormatDateTime(Fields!DateTimeField.Value, DateFormat.ShortDate))

答案 1 :(得分:1)

在文本框表达式中使用类似的内容:

=IIf(IsNothing(Fields!DateTime.Value), "", Fields!DateTime.Value)

答案 2 :(得分:1)

看起来没有关于此的文档。接下来最好的事情就是根据我们的集体经验制作这个Q& A文件。

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

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

  • 如果查询COALESCE将NULL转换为其他内容,例如字符串“NULL”或MIN DATETIME;
  • 如果您有文本框值的表达式,例如IIF(Fields!MyDateTime.Value Is Nothing, "01-01-1900", Fields!MyDateTime.Value)

答案 3 :(得分: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投票日期的原因。

答案 4 :(得分:0)

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