试图获得正确的字符串部分

时间:2016-12-12 23:17:26

标签: sql sql-server

这里是SQL的新手,我试图获取可变长度字符串中的最后一个值。

列[路径]设置如此......

Attributes\Objects\Heirarchies\<Taxonomy>\
Attributes\Objects\Heirarchies\<Taxonomy>\Animalia\
Attributes\Objects\Heirarchies\<Taxonomy>\Animalia\Chordata\
etc...

我只想要字符串中的最后一个值。事情很简单(反正我的技能很简单),如果每个字符串都没有以&#39;结束,当我尝试这个时发现:

SELECT RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1)

并且......什么都没有。

非常感谢任何帮助。我在这里做过一些搜索,但似乎没有什么能适合我的情况。

干杯!

3 个答案:

答案 0 :(得分:2)

这可以通过在应用原始sql之前删除路径中的最后一个字符

来实现
SELECT RIGHT([Path], CHARINDEX('\', REVERSE([Path]))-1) lastElement from
(
    select left( [path] , len([path]) -1 ) [path] from paths
) paths

-- example results
lastElement
<Taxonomy>
Animalia
Chordata

支持架构

CREATE TABLE paths
(
    [path] nvarchar(255)
)
GO

insert into paths( [path] ) values ('Attributes\Objects\Heirarchies\<Taxonomy>\')
insert into paths( [path] ) values ('Attributes\Objects\Heirarchies\<Taxonomy>\Animalia\')
insert into paths( [path] ) values ('Attributes\Objects\Heirarchies\<Taxonomy>\Animalia\Chordata\')

答案 1 :(得分:0)

SELECT REVERSE(LEFT(REVERSE(LEFT([Path], LEN([Path])-1)), CHARINDEX('\', REVERSE(LEFT([Path], LEN([Path])-1)))-1))

答案 2 :(得分:0)

它非常适合从各种文件路径中提取文件名

SELECT Reverse(Substring(Reverse(LEFT(@String, LEN(@String) - 1)),1,CharIndex('\',Reverse(LEFT(@String, LEN(@String) - 1)))-1))