在两个单词之间拆分ssrs表达式

时间:2015-07-08 22:39:04

标签: sql-server-2008 reporting-services ssrs-expression

我需要将结果拆分为3个单独的表达式,使用sql server 2008。

我目前得到的结果就是例如。 “person:man tel:yes rel:christian msg:misc text”

我需要把它分成:

“人:男人” “电话:是的” “Rel:Christian” “Msg:misc text”

我一直在使用iif语句在“tel”之前返回该位但是不能让它仅在tel和rel之间返回等。冒号之前的部分将保持静态,无论我的数据集中返回哪个结果,但部分在进入下一部分之前,冒号可以是任何东西(任何长度)。有人可以帮忙吗? 论坛上的其他类似问题对第一个表达有帮助,但后面的表达有点困难。

3 个答案:

答案 0 :(得分:0)

这可以在SQL而不是SSRS中轻松实现。 我强烈建议这可以在SQL中完成。 您可以使用CHARINDEX函数将字符串拆分为4个单独的列(person,tel,Rel,Message)

答案 1 :(得分:0)

这可以在SSRS中实现,就像使用SQL一样 - 使用 INSTR (SQL Server中的CHARINDEX)和 MID (SQL中的SUBSTRING)找到位置并解析字符串。您可能会将空格用作分隔符,并且数据中包含空格(“Msg: misc text ”)。

首先,我会在数据集中创建一个计算列,将空格分隔符更改为另一个字符,以便更容易找到空格。我通常使用Pipe(|),因为它很少使用。

=REPLACE(REPLACE(REPLACE(FIELDS!YourFIELD!.VALUE, ": ", "`"), " ", "|"), "`", ": ")

第1栏: = MID(First(Fields!txt2.Value,“DISPUTES”),1,     INSTR(Fields!txt2.Value,“|”) - 1)

列2: = MID(MID(Fields!txt2.Value,INSTR(Fields!txt2.Value,“|”)+ 1,LEN(Fields!txt2.Value)),1,INSTR(MID(Fields!txt2.Value,INSTR( Fields!txt2.Value,“|”)+ 1,LEN(Fields!txt2.Value)),“|”) - 1)

第3列和第4列类似 - 虽然稍微复杂一些。

答案 2 :(得分:0)

对于SQL方法,这适用于我所做的测试:

SELECT LEFT(txt, CHARINDEX('tel:',txt)-2) AS part1,
    SUBSTRING(txt, CHARINDEX('tel:',txt), CHARINDEX('rel:',txt)-CHARINDEX('tel:',txt)) AS part2,
    SUBSTRING(txt, CHARINDEX('rel:',txt), CHARINDEX('msg:',txt)-CHARINDEX('rel:',txt)) AS part3,
    RIGHT(txt, LEN(txt)-CHARINDEX('msg:',txt)+1) AS part4
FROM (
    SELECT 'person: man tel: yes rel: christian msg: misc text' AS txt
) AS t