【问题标题】:Find Sub string in SSRS and evaluate or replace在 SSRS 中查找子字符串并评估或替换
【发布时间】:2020-01-02 00:07:01
【问题描述】:

在 SSRS 中,我有一个名为 Event_dt 的数据字段,它返回为 Digital,然后是月份,然后是年份。看起来像这样 Digital January 2021Digital May 2019

问题 1: 在一个字段中 - 我需要截断单词 Digital,这样字符串只会显示为 January 2021May 2019

问题2:在我需要评估的第二个字符串中,如果Event_dt 字符串包含单词Digital,那么它应该输出其他内容。我知道 iff(part ... 但我不确定如何在 SSRS 中获取子字符串部分。

【问题讨论】:

  • 为什么不在查询中分开这些?如果您有一个字段仅用于字符串的第一部分和单独的日期,那么使用起来会容易得多。
  • 我可以把它们分开。但问题是第二个字符串仅在 SSRS 中,评估它的唯一方法是第一个字符串中是否包含单词 Digital。如果我们删除它,我们将无法评估第二部分。
  • 如果它们是分开的,它们仍然应该在同一行中出现。这意味着你可以做=IIF(Fields!FirstString.Value = "Digital", Fields!SomethingElse.Value, Fields!SecondString.Value)。如果这不是数据的布局方式,我可能会误解这个问题。
  • SSRS 中的第二个字符串是硬编码文本。现在他们想要基于 event-dt 字段评估的逻辑。如果日期是数字日期(代码中的标记),则它可能是常规日期或不是常规日期,那么我们希望更改第二个字符串。我们不会忽略它。

标签: string tsql if-statement reporting-services substring


【解决方案1】:

对于第一季度,替换相当简单。使用 REPLACE 函数并将Digital 替换为空字符串。不要忘记Digital后面的空格。

=Replace(Fields!Event_dt.Value, "Digital ", "")

对于第二季度,您没有说要如何替换文本。要检查字段是否有某个字符串,可以使用 InStr 函数。它返回要在字符串中找到的字符串的起始位置。如果它在你的字段中找不到字符串,它会返回 0 (如果你只需要确定它是否在那里而不是在哪里,你检查 0 of not 0)。

=IIF(InStr(Fields!Event_dt.Value, "Digital") > 0, <Has String Part>, <ELSE Part>)

在 SSRS 中,MID 函数与 SUBSTRING 相同 - 它从第一个参数中指示的起点返回字符,并在第二个参数中返回要返回的字符数。

你实际上可以用这个来写 REPLACE - 虽然它会更复杂。

=IIF(InStr(Fields!Event_dt.Value, "Digital") > 0, MID(Fields!Event_dt.Value, 9, LEN(Fields!Event_dt.Value)), Fields!Event_dt.Value)

这将读作

如果 EVENT DT 包含 Digital(即 INSTR 返回的值大于 0),则返回从字符 9 到字符串末尾的 EVENT DT 字段,否则返回 EVENT DT 字段。

【讨论】:

  • 对于第二季度,我想做的是说如果数字这个词存在写“这个事件只是数字”如果它不存在它应该说“这个事件将位于. ..等”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多