SSRS功能与正则表达式

Jac*_*r99 9 reporting-services

我正在使用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 is nothing,"",System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value,"(\ d {3})[ - .] (\ d {3})[ - .](\ d {4})","($ 1)$ 2- $ 3"))

然后它返回错误.#ERROR显示在我的报告中.你能用正则表达式使用iif吗?还有另外一种方法吗?

Tim*_*one 14

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

您当然可以在IIF()语句中使用正则表达式,但无论测试表达式的结果如何,它都会评估两个结果条件.因此,您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")
Run Code Online (Sandbox Code Playgroud)

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