我有一个一致的数据来选择一个特定的字符串
样本数据:
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)))
建议我
答案 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字符)。