我想提取两个特殊字符之间的单词。我尝试使用trim和substring函数,但结果不是预期的。
输入:
viewpointops\Leslie.cullum.7M5
所需的输出:
Leslie.cullum
我尝试从表中的select SUBSTRING(c2,0,CHARINDEX('\',c2))
使用此查询来将Perspectiveops \保存在变量中,其余输入类似地保存。这是一个漫长的查询,而且效率也不高。
谢谢。
答案 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 |
+---------------+