首页 > 解决方案 > 使用 SUBSTRING 和 CHARINDEX 提取部分名称

问题描述

我想提取名称的一部分(最后一个“_”之后的所有内容):

BL_BU_TS_UI_UX -> UX
BL_BU_TS_AZ_Mobile -> Mobile
BL_BU_TS_UI_Projects -> Projects

我使用以下代码: SUBSTRING([BL_or_CL_Sponsor], CHARINDEX('_', [BL_or_CL_Sponsor], 1), 30) 它返回以下数据:

_UI_UX
_AZ_Mobile
_UI_Projects

我正在考虑使用 REVERSE,但它说error converting nvarchar to int. 请你帮助我好吗?

谢谢,BR。

标签: sqlsql-server

解决方案


不是性能最高的选项,但您可以在此处使用反向技巧:

SELECT
    BL_or_CL_Sponsor,
    REVERSE(LEFT(REVERSE(BL_or_CL_Sponsor),
            CHARINDEX('_', REVERSE(BL_or_CL_Sponsor)) - 1)) AS prefix
FROM yourTable;

下面演示链接的屏幕截图

演示

要了解这个技巧是如何工作的,请考虑输入步骤的细分BL_BU_TS_UI_UX

BL_BU_TS_UI_UX
XU_IU_ST_UB_LB      (reverse string)
XU                  (take left until reaching, but including, first underscore)
UX                  (reverse this substring to obtain the prefix)

推荐阅读