提取两个斜线之间的数据

时间:2019-06-27 10:15:11

标签: sql sql-server-2012

我正在努力解决我遇到的问题,我试图从一个Column创建两个字段。

第一个将在第一个斜杠之前获取数据,这很好用。

下面是我的代码:

@Column(insertable = false, updateable = false)
private Timestamp createdTimestamp;

我遇到的第二个问题是,我现在还需要将第二个和第三个斜杠之间的内容提取到另一列称为Middlepath的列中。

我不能为了爱或金钱而工作,数据由三个单位组成,中间用/分隔。

如果有人可以提供帮助,我将永远感激不已,因为我可以做一点SQL,但我不是程序员。

数据看起来像“产品” \“电梯” \“小型电梯”(长度可能会大不相同)。

输出应为“礼物”部分

2 个答案:

答案 0 :(得分:0)

这将为您提供升降机的输出。

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

答案 1 :(得分:0)

您可以使用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

请参见demo
结果:

> 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 

请参见demo