我有一个工作版本的提取步骤,这似乎相当长,我很好奇是否有一个更简单的方法,我可能会错过.我在论坛上的其他问题中看到过SUBSTRING_INDEX(),但是,在我的SQL Server Management Studio版本中没有识别该函数.

我有一个类似如下的字符串:Make\Model\Trim\New

我只想从这个字符串中提取"Trim".本质上,提取最后一个反斜杠和倒数第二个反斜杠之间的子字符串.

因为字符串的长度和反斜杠的数量可能不同,所以我不能简单地说"在第二个和第三个反斜杠之后".下面是我目前正在使用的代码.

Select
 REVERSE(SUBSTRING(
     REVERSE(CAR_DESC),
     CHARINDEX('\',REVERSE(CAR_DESC))+1,
     CHARINDEX('\',REVERSE(CAR_DESC),CHARINDEX('\',REVERSE(CAR_DESC))+1)-CHARINDEX('\',REVERSE(CAR_DESC))-1
     )) AS TEST1
FROM TABLEA

推荐答案

只是使用JSON的另一种 Select

Example

Declare @YourTable Table ([SomeCol] varchar(50))  Insert Into @YourTable Values 
 ('Make\Model\Trim\New')
 
Select A.[SomeCol]
       ,Pos1 = JSON_VALUE(JS,'$[0]')
       ,Pos2 = JSON_VALUE(JS,'$[1]')
       ,Pos3 = JSON_VALUE(JS,'$[2]')
       ,Pos4 = JSON_VALUE(JS,'$[3]')
 From  @YourTable A
Cross Apply (values ('["'+replace(string_escape([SomeCol],'json'),'\\','","')+'"]') ) B(JS)

Results

SomeCol               Pos1  Pos2    Pos3    Pos4
Make\Model\Trim\New   Make  Model   Trim    New

我不得不避开反斜杠,因此\\


IF FOUR elements (and no more),你可以用parsename()

Select A.[SomeCol]
       ,Pos3 = parsename(replace(SomeCol,'\','.'),2)
 From  @YourTable A

Sql相关问答推荐

使用SQL/R循环查找邻居

如何连接第二个表并将其内容输入到第一个表的单个字段中?

我怎样才能得到列值对应的最大值在另一个?

将Dense_RANK列为聚合(非解析)函数(&A)

使用多个嵌套数组查询JSON数据

属于(日期)范围类型及其交集的总权重​

带日期函数的复合索引不允许只扫描索引吗?

将JSON文件导入Postgres 16数据库时出错(22P04上次预期列之后的额外数据)

在Power Bi中将SQL代码转换为DAX

查找滑动窗口框架中的最大和最小列值

对现有记录进行分组

用替代方案替换 SQL Cursor 以提高性能

复制行并根据 Oracle SQL 中其他表的值更改值

Postgres如何在一个日历周中前进和回填值

SQL 函数 DIFFERENCE 返回有趣的分数

过滤具有一对多关系的两个表之间的数据

在 SQL 的每行选项中 Select 最大值

sql count distinct by column 和 sum false 和 true

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数

SQL中所有先前日期的累计总和