首页 > 解决方案 > 在sql数据库中最后一次出现“_”后获取子字符串值

问题描述

我想在最后一次出现“_”后获得价值,所以我使用下面的方法,它给了我“BSARST.G041720151200”,这是正确的。

他们是否有更好的方法或以下方法足够体面?

declare @var varchar(max)='\\IPC-NAS03.ads.aexp.com\US022868_E3\BatchFilings\BatchArchive\FIU2FINCEN_BSARST.G041720151200'
select right(@var,charindex('_',reverse(@var))-1)

标签: sql-server

解决方案


正如我在评论中提到的那样:“我能想到的唯一替代方法是使用一个字符串分割器,它对部分进行编号(例如DelimitedSplit8K_LEAD),然后根据项目编号降序选择第一行。这可能会更快。 "

WITH RNs AS(
    SELECT DS.Item,
           ROW_NUMBER() OVER (ORDER BY DS.ItemNumber DESC) AS RN --PARTITION BY V.YourString?
    FROM (VALUES('\\IPC-NAS03.ads.aexp.com\US022868_E3\BatchFilings\BatchArchive\FIU2FINCEN_BSARST.G041720151200'))V(YourString)
         CROSS APPLY dbo.DelimitedSplit8K_LEAD(V.YourString,'_') DS)
SELECT R.Item
FROM RNs R
WHERE R.RN = 1;

推荐阅读