如何选择一致的中间字符串

时间:2018-10-12 14:36:25

标签: sql sql-server tsql

我有一个一致的数据来选择一个特定的字符串

样本数据:

Declare @v varchar(MAX) = '
 THEN ''ERC'' ELSE ''UNKNOWN'' END As Name,
            max(dt) as Effective_dt
            from M_stg.Employee_zone z 
            left join SD.ods.r_country r on ''.'' + r.country__code = right(z.EMP,3) and r.IND = 1'

我怎么只能选择

Employee_zone

从我尝试过的整个字符串中

这样

select LTRIM(RTRIM(PARSENAME(REPLACE (SUBSTRING(@v,CHARINDEX('FROM',@v),LEN(@v) ),'',' '),2)))

建议我

3 个答案:

答案 0 :(得分:2)

使用CHARINDEX函数查找:

from子字符串,两侧带有空格

.之后的from字符

.

之后的下一个空格

并获取最后2个字符索引之间的子字符串。

答案 1 :(得分:0)

如果您尝试从硬编码的字符串中检索表名,请尝试以下操作:

select left(right (@v, len(@v)-(charindex('M_stg.', @v)+len('M_stg.')-1)),charindex(' ',right (@v, len(@v)-(charindex('M_stg.', @v)+len('M_stg.')-1))) -1) 

答案 2 :(得分:0)

我认为以下内容并不漂亮,但确实可以做到:

select SUBSTRING(LTRIM(SUBSTRING(@v, CHARINDEX('FROM', @v)+4, LEN(@v))),
CHARINDEX('.', LTRIM(SUBSTRING(@v, CHARINDEX('FROM', @v)+4, LEN(@v))))+1,
CHARINDEX(' ',
SUBSTRING(LTRIM(SUBSTRING(@v, CHARINDEX('FROM', @v)+4, LEN(@v))),
CHARINDEX('.', LTRIM(SUBSTRING(@v, CHARINDEX('FROM', @v)+4, LEN(@v))))+1, LEN(@v)))-1)

假定您希望第一个表名出现在字符串中的第一个FROM子句之后,并且表名后跟一个空格(不是TAB字符)。