Sql SSR比较表达式中的日期
我有一些基本表达式来突出显示某些字段:Sql SSR比较表达式中的日期,sql,reporting-services,reporting,Sql,Reporting Services,Reporting,我有一些基本表达式来突出显示某些字段: =IIF(Fields!Failure.Value > 0, "Red", "Transparent") 但是,我有另一个字段,其中包含以下格式的日期: 22/08/2016 22/08/2016 - each field can contain multiple dates. 这以VARCHAR的形式存储在SQL中 我需要在报告中运行类似的表达式以实现以下目标: 如果该日期比运行报告的日期早1天,请突出显示该字段。如果日期晚于1天,则用不同颜
=IIF(Fields!Failure.Value > 0, "Red", "Transparent")
但是,我有另一个字段,其中包含以下格式的日期:
22/08/2016 22/08/2016 - each field can contain multiple dates.
这以VARCHAR的形式存储在SQL中
我需要在报告中运行类似的表达式以实现以下目标:
如果该日期比运行报告的日期早1天,请突出显示该字段。如果日期晚于1天,则用不同颜色突出显示字段
我很熟悉基本的表达方式,但我想不出一个简单的方法来获取当前日期,然后对两者进行比较 您可以使用Split函数生成一个值数组。当然,您仍然需要选择其中一个进行测试。下面的内容可能会让你重新开始
=Iif(
CDate(
Split(
"21/08/2016, 22/08/2016",
","
).GetValue(0)
) < Today,
"True",
"False"
)
我在VB中使用Date.Today来限制日期与日期的比较。如果您想更精确,例如:精确的时间,请使用Date。现在,您可以使用Split函数生成一个值数组。当然,您仍然需要选择其中一个进行测试。下面的内容可能会让你重新开始
=Iif(
CDate(
Split(
"21/08/2016, 22/08/2016",
","
).GetValue(0)
) < Today,
"True",
"False"
)
我在VB中使用Date.Today来限制日期与日期的比较。如果你想更精确,比如:准确的时间,就用Date。现在,就像其他人说的那样,你真的不应该使用这样的黑客 但是,这应该对你有用:
=iif(Len(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),"")) = 0, "Transparent" ,iif(Len(Replace(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),""), Format(Today().AddDays(-1), "dd/MM/yyyy"),"")) = 0, "Green", "Red"))
基本上,删除连接字符(在本例中为空格),然后以给定格式替换当前日期的所有实例。如果还有任何字符,则表示您的日期与今天不匹配。然后取该值并对昨天的任何实例重复
显然,如果您的日期格式发生更改,这将失败。但是,你已经知道,将日期作为字符串进行比较是一个坏主意,对吧…正如其他人所说,你真的不应该使用这样的方法 但是,这应该对你有用:
=iif(Len(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),"")) = 0, "Transparent" ,iif(Len(Replace(Replace(Replace(Fields!DateField.Value," ",""), Format(Today, "dd/MM/yyyy"),""), Format(Today().AddDays(-1), "dd/MM/yyyy"),"")) = 0, "Green", "Red"))
基本上,删除连接字符(在本例中为空格),然后以给定格式替换当前日期的所有实例。如果还有任何字符,则表示您的日期与今天不匹配。然后取该值并对昨天的任何实例重复
显然,如果您的日期格式发生更改,这将失败。但是您已经知道,将日期作为字符串进行比较是一个坏主意,对不对…使用日期数据类型,而不是varchar来存储日期。不幸的是,我不能这样做,因为单个包含多个日期项。这是一个更糟糕的设计问题。。。永远不要将数据存储为逗号分隔的项。这只会给您带来很多麻烦。您能否包含生成此报表使用的数据集的SQL查询?此外,字段中每个日期的意义是什么?它们是否总是与您的示例相同,或者它们是具有特定、单独含义的不同日期?每个日期都有相关性,最终我需要依次检查每个日期并生成一个聚合结果(即,如果任何给定日期与当前日期相差不大,请执行某些操作)使用日期数据类型,而不是varchar,存储日期。不幸的是,我不能这样做,因为单个包含多个日期条目。这是一个更糟糕的设计问题。。。永远不要将数据存储为逗号分隔的项。这只会给您带来很多麻烦。您能否包含生成此报表使用的数据集的SQL查询?此外,字段中每个日期的意义是什么?根据您的示例,它们是否总是相同的,或者它们是具有特定、单独含义的不同日期?每个日期都有相关性,最终我需要依次检查每个日期,并按照示例中的格式生成一个聚合结果(即,如果给定的日期与当前日期相差不大,请执行某些操作),您需要在空格上拆分,而不是逗号。它将在空格上拆分,但是,我无法将日期硬编码到拆分()中。如何用给定字段的所有值自动填充此字段?因此,用数据集字段替换硬日期字符串,例如Split(Fields!MyFieldName.Value)每个日期都有相关性,最终我需要依次检查每个日期并生成一个聚合结果(即,如果任何给定日期与当前日期相差不大,请执行某些操作)Pnp,如需更好的解决方案,请参见上文。按照示例中的格式,您需要在空格上拆分,而不是在逗号上拆分。它将在空格上拆分,但是,我无法将日期硬编码到拆分()中。如何用给定字段的所有值自动填充此字段?因此,用数据集字段替换硬日期字符串,例如Split(Fields!MyFieldName.Value)每个日期都有相关性,最终我需要依次检查每个日期并生成一个聚合结果(即,如果任何给定日期与当前日期相差不大,请执行某些操作)Pnp,请参阅上文,了解可能更好的解决方案我在尝试运行报表时出错(我已将DateField.Value替换为我的dataset值)。请同时粘贴错误消息和表达式。此外,是否替换了DateField的两个实例?忽略,这非常有效,只是我“特别”。非常感谢!我在尝试运行报表时出错(我已将DateField.Value替换为我的数据集值)。请同时粘贴错误消息和表达式。此外,是否替换了DateField的两个实例?忽略,这非常有效,只是我“特别”。非常感谢!