SSRS:= MID和InStr

时间:2017-03-09 02:11:22

标签: reporting-services

我是SSRS和表达的新手,所以请耐心等待。

我希望能够在字符串文本中提取和捕获某些数据,例如:

  • 添加表格'黄色 - 红色 - 白色'到' abc abc - [abc] xxx ....
  • 删除表格'黄色 - 蓝色 - 红色'来自' abc abc - [abc] xxx ....

我只想在表' 之前和之后' '之前捕获任何内容。从

这是我到目前为止所拥有的,

=MID(Fields!Table.Value,InStr(Fields!Table.Value,"Yellow-")
,LEN(TRIM(Fields!Table.Value))-InStr(Fields!Table.Value,"' to",)-6)

当我运行它时,它将返回黄色 - 蓝色 - 红色'来自' abc abc - [abc] xxx ... 如何在'之后取下任何东西?来自'至'中的字符'来自并不总是相同而且并不总是相同的#字符,一行可以少一行另外一行可以更多。唯一相同/重复的是 **增加了表
删除表**

非常感谢那里的任何帮助。

JT

1 个答案:

答案 0 :(得分:0)

有两种类似的选择:

  1. 在您正在进行的SSRS表达式中完成所有工作:
  2. 我会将字符串的'from'和'to'部分替换为单个标识符字符串然后查找。 我目前无法检查这一点,但基本上你需要用

    替换对Fields!Table.Value的任何引用
    Replace(Replace(Fields!Table.Value," to ","#findme#")," from ","#findme#")
    

    此外,您需要查找'Table'的出现,而不是'Yellow'并相应地调整表达式,必须调整MID表达式的起始位置,以将字符串'Table'的长度变为帐户。

    这些表达式可能会让人感到麻烦,所以我常常采用另一种方法,如下所示。

    选项2: 完成数据集中的部分或全部工作,这将使报告更易于理解。除了您在数据集中创建一个新列并修改SQL以提取表列的正确部分之外,该过程将类似。

    像这样的东西

    SELECT 
       myTableColumn
       [my other columns]....,
       , SUBSTRING(myTableColumn
                    ,  CHARINDEX('table ', myTableColumn) + 6
                    , CHARINDEX(' #findme# ',REPLACE(REPLACE(myTableColumn, ' from ', ' #findme# '), ' to ', ' #findme# ')) 
                        - CHARINDEX('table ', myTableColumn) - 6) as myResult
    FROM myTable