1

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

我目前得到的结果是例如。“人:人电话:是的相对:基督教味精:杂项文本”

我需要把它分成:

“人:人”“电话:是”“Rel:Christian”“Msg:其他文本”

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

4

3 回答 3

0

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

于 2015-07-09T14:47:55.083 回答
0

这可以在 SSRS 中实现,与使用 SQL 的方式几乎相同 - 使用INSTR(SQL Server 中的 CHARINDEX)和MID(SQL 中的 SUBSTRING)来查找位置并解析字符串。存在一个问题,您使用空格作为分隔符并且您的数据中有空格(“Msg: misc text ”)。

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

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

第 1 列:=MID(First(Fields!txt2.Value, "DISPUTES"), 1, INSTR(Fields!txt2.Value, "|") - 1)

Column2:=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 列将是相似的——尽管稍微复杂一些。

于 2015-07-10T00:02:38.607 回答
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
于 2015-07-10T00:03:39.487 回答