繁体   English   中英

提取两个斜线之间的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM