SSRS在第二个字符串之前从字符串中提取子字符串

时间:2016-12-01 01:36:43

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

我有一个类似于以下4444-4444-TestingItem1的字段。 我是否有可能将该字段提取到4444-4444。 如果是这样我怎么做?我将在SSRS中使用什么功能。 请注意,在第一个破折号之前和第二个破折号之前,它可以是任意数量的字符。

如何在SSRS中实现这一目标?

4 个答案:

答案 0 :(得分:3)

您可以结合使用CHARINDEXSUBSTRING

来执行此操作
SELECT SUBSTRING(field, 1, CHARINDEX('-', field, CHARINDEX('-', field)+1) - 1)
FROM yourTable

答案 1 :(得分:3)

在SSRS中,您可以使用LEFTInStrRev函数:

=LEFT(Fields!YourField.Value,InStrRev(Fields!YourField.Value,"-")-1)

如果有帮助,请告诉我。

答案 2 :(得分:1)

pat1:查找char的第一个位置是非数字或" - "

pat2:找到"的第一个位置 - "并按照非数字

    SELECT a.s,LEFT(a.s,PATINDEX('%[^0-9-]%',a.s)-1) AS pat1
              ,LEFT(a.s,PATINDEX('%[-][^0-9]%',a.s)-1)  AS pat2
    FROM (VALUES('4444-4444-TestingItem1')) a(s)
s                      pat1                   pat2
---------------------- ---------------------- ----------------------
4444-4444-TestingItem1 4444-4444-             4444-4444

答案 3 :(得分:1)

蒂姆和亚历杭德罗都给出了与你的榜样一致的好答案。这是两者的组合,作为SSRS表达式而不是SQL,并处理具有两个以上破折号的字符串。

=LEFT(Fields!FIELD.Value, InStr(InStr(Fields!FIELD.Value, "-") +1, Fields!FIELD.Value, "-") -1)