[英]Extract data between two slashes
我正在努力解决我遇到的一个问题,我试图从一个Productcategories.fullpath
创建两个字段。
第一个将在第一个斜杠之前获取数据,这运行良好。
下面是我的代码:
LEFT(Productcategories.Fullpath, CHARINDEX('/',ProductCategories.Fullpath + '/') - 1) as shortpath,
我遇到的第二个问题是,我现在还需要将第二个和第三个斜杠之间的内容提取到另一个名为 middlepath 的列中。
我不能让它为爱情或金钱工作,数据由三个单位组成,以 / 分隔。
如果有人可以提供帮助,我将永远感激,因为 SQL 我可以做一点,但我不是程序员。
数据看起来像产品\\升降机\\小型升降机(长度可能会有很大差异)。
输出应该是“电梯”部分
这将为您提供输出作为升降机。
declare @t table (Files varchar(50))
insert into @t values ('Products\lifts\small')
select substring(files,CHARINDEX('\',files)+1,CHARINDEX('\', files, (CHARINDEX('\', files)+1)) - CHARINDEX('\',files)-1) from @t
您可以使用 3 个字符串函数: left()
、 right()
和charindex()
如下所示:
select
left(Fullpath, charindex('\', Fullpath) - 1) shortpath,
left(
right(Fullpath, len(Fullpath) - charindex('\', Fullpath)),
charindex('\', right(Fullpath, len(Fullpath) - charindex('\', Fullpath))) - 1
) middle
from Productcategories
请参阅演示。
结果:
> shortpath | middle
> :-------- | :-----
> Products | lifts
对于只有 1 个“\\”或没有的情况更复杂:
select
case charindex('\', Fullpath)
when 0 then Fullpath
when 1 then ''
else left(Fullpath, charindex('\', Fullpath) - 1)
end shortpath,
case charindex('\', Fullpath)
when 0 then ''
else case charindex('\', Fullpath, charindex('\', Fullpath) + 1)
when 0 then substring(Fullpath, charindex('\', Fullpath) + 1, len(Fullpath))
else left(
right(Fullpath, len(Fullpath) - charindex('\', Fullpath)),
charindex('\', right(Fullpath, len(Fullpath) - charindex('\', Fullpath))) - 1
)
end
end middle
from Productcategories
请参阅演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.