T-SQL查询以获取两个特殊字符之间的字符串

时间:2018-08-08 18:41:53

标签: sql-server tsql

我想提取两个特殊字符之间的单词。我尝试使用trim和substring函数,但结果不是预期的。

输入:

viewpointops\Leslie.cullum.7M5 

所需的输出:

Leslie.cullum

我尝试从表中的select SUBSTRING(c2,0,CHARINDEX('\',c2))使用此查询来将Perspectiveops \保存在变量中,其余输入类似地保存。这是一个漫长的查询,而且效率也不高。

谢谢。

3 个答案:

答案 0 :(得分:2)

也许:

DECLARE @string VARCHAR(100) = ' viewpointops\Leslie.cullum.7M5';

SELECT txt = SUBSTRING(s.s1, 1, CHARINDEX('.', s.s1, d.d1)-1)
FROM (VALUES (SUBSTRING(@string, CHARINDEX('\',@string)+1, 8000))) s(s1)
CROSS APPLY (VALUES (CHARINDEX('.',s.s1)+1)) d(d1);

答案 1 :(得分:1)

如果图案与样品有些一致

示例

DECLARE @S VARCHAR(100) = ' viewpointops\Leslie.cullum.7M5';

select parsename(replace(parsename(@S,3),'\','.'),1)+'.'+parsename(@S,2)

返回

Leslie.cullum

答案 2 :(得分:0)

如果从表中提取数据,这就是我要这样做的方式。

DECLARE @data TABLE ( [value] VARCHAR(255) );
INSERT INTO @data ( [value] ) VALUES ( ' viewpointops\Leslie.cullum.7M5' );

SELECT
    SUBSTRING( 
        x.val -- value to parse.
        , 1   -- starting position.
        , LEN( x.val) - CHARINDEX( '.', REVERSE( x.val ) ) -- gets the length of the value to return.
    ) AS MyParsedVal
FROM ( 

    -- return everything after the backslash for easier parsing ( assumes there is only 1 as in your example ).
    SELECT 
        SUBSTRING( [value], CHARINDEX( '\', [value] ) + 1, CHARINDEX( '\', REVERSE( [value] ) ) ) AS val
    FROM @data

) AS x;

返回

+---------------+
|  MyParsedVal  |
+---------------+
| Leslie.cullum |
+---------------+