我想在两个特殊字符之间提取一个单词。我尝试使用修剪和子字符串函数,但结果不是预期的。
输入:
viewpointopsLeslie.cullum.7M5
所需输出:
Leslie.cullum
我尝试从表中select SUBSTRING(c2,0,CHARINDEX('',c2))
使用此查询将 viewpointops\ 保存在变量中,其余输入也是如此。这是一个很长的查询,也不是一个有效的查询。
提前谢谢。
也许:
DECLARE @string VARCHAR(100) = ' viewpointopsLeslie.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);
如果模式与示例有些一致
例
DECLARE @S VARCHAR(100) = ' viewpointopsLeslie.cullum.7M5';
select parsename(replace(parsename(@S,3),'','.'),1)+'.'+parsename(@S,2)
返回
Leslie.cullum
如果从表中提取数据,我会这样做。
DECLARE @data TABLE ( [value] VARCHAR(255) );
INSERT INTO @data ( [value] ) VALUES ( ' viewpointopsLeslie.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 |
+---------------+