我有一个有点时髦的字符串,除了使用数字位置和一串子字符串之外,我似乎无法找到更好的解析方法。
有没有更好的方法来打破这个字符串?
Declare @EXTERNAL_KEY Varchar(100) = 'ABC_2015SP_DEFG1321.088TR'
Print Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+8,4)+' '+Replace(Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+12,8),'.',' ')+' '+Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+20,2)
我希望实现的最终结果:
DEFG 1321 088 TR
答案 0 :(得分:3)
您可以使用STUFF + PARSENAME + REPLACE
SELECT STUFF(PARSENAME(REPLACE(@EXTERNAL_KEY,'_','.'),2),5,0,' ') +' '+ STUFF(PARSENAME(@EXTERNAL_KEY,1),4,0,' ')
输出:
DEFG 1321 088 TR
答案 1 :(得分:2)
采用固定格式
Declare @EXTERNAL_KEY Varchar(100) = 'ABC_2015SP_DEFG1321.088TR';
select stuff(stuff(replace(right(@EXTERNAL_KEY,14), '.', ' ') ,13,0,' '), 5,0,' ')
答案 2 :(得分:1)
如果您的格式已修复,请尝试使用'PARSENAME'
AND 'LEFT'
和'RIGHT'
功能以避免静态索引
DECLARE @Str NVARCHAR(MAX)='ABC_2015SP_DEFG1321.088TR'
SELECT LEFT(PARSENAME(REPLACE(@Str,'_','.'),2),4)+' '+RIGHT(PARSENAME(REPLACE(@Str,'_','.'),2),4)+' '+LEFT(PARSENAME(REPLACE(@Str,'_','.'),1),3)+' '+RIGHT(PARSENAME(REPLACE(@Str,'_','.'),1),2)