【问题标题】:SSRS function with regex带有正则表达式的 SSRS 函数
【发布时间】:2010-06-30 20:34:05
【问题描述】:

我正在为我的数据库中的电话号码字段创建一个使用 SSRS 作为字符串值的报告。我需要以电话号码格式 (555) 555-1212 格式化字符串值。如果值为 null,则不显示任何内容。

例如,我的数据库中的一个表有一个电话号码列,其中一些值为 NULL。

我有一个可以很好地格式化电话号码的正则表达式。

=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[-.](\d{3})[-.](\d{4})","($1) $2-$3")

但是,如果我这样做:

=IIf(Fields!Phone.Value 什么都不是,"", System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value,"(\d{3})[ -.](\d{3})[-.](\d{4})","($1) $2-$3"))

然后它返回一个错误。 #ERROR 显示在我的报告中。您可以将 iif 与正则表达式一起使用吗?还有其他方法吗?

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    (我假设您只会为您的空值记录获得#ERROR,因为这是我使用您提供的表达式设置测试用例时发生的情况。如果没有,我将进一步调查。)

    您当然可以在IIF() 语句中使用正则表达式,但不管您的测试表达式的结果如何,它都是evaluates both result conditions。因此,您的Regex.replace() 也会对您的NULL 值执行,这自然会产生错误。

    我能够通过稍微重新安排一些事情来产生我认为你所追求的行为,以便我们有这个表达式(为了可读性而格式化):

    =System.Text.RegularExpressions.Regex.Replace(
      IIf(IsNothing(Fields!Phone.Value), "", Fields!Phone.Value),
      "(\d{3})[ -.](\d{3})[ -.](\d{4})",
      "($1) $2-$3")
    

    当值为NULL 时,这将为您提供一个空白字段,否则它将相应地格式化您的电话号码。希望这会有所帮助。

    【讨论】:

    • 谢谢,这行得通。我只需要稍微格式化一下正则表达式。 =System.Text.RegularExpressions.Regex.Replace(IIf(IsNothing(Fields!Phone.Value), "", Fields!Phone.Value), "(\d{3})[ -.]*(\d{3 })[ -.]*(\d{4})", "($1) $2-$3")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2020-02-24
    • 2015-06-16
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多