Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql SSR比较表达式中的日期_Sql_Reporting Services_Reporting - Fatal编程技术网

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的两个实例?忽略,这非常有效,只是我“特别”。非常感谢!