获取一个未确定长度的子字符串,从字符串的结尾开始

时间:2017-03-06 18:48:05

标签: sql-server

我有一系列零件编号,通常只有10个字符,但有时在开头有一个额外的2或3。我想要一个包含所有这些部分的明确列表,不包括仅包含大小信息的最后5个字符。显然,一个简单的子串不起作用,据我所知,它与rtrim()类似,它允许指定字符范围。我在下面发布了我的解决方案,但我觉得它有点草率,想知道是否有更好的方法?

SELECT 
    DISTINCT REVERSE(SUBSTRING(REVERSE(P.ID),6,LEN(P.ID))),
    P.DESCRIPTION
FROM REQUIREMENT R 
INNER JOIN OPERATION O ON
    R.WORKORDER_BASE_ID = O.WORKORDER_BASE_ID AND 
    R.WORKORDER_LOT_ID = O.WORKORDER_LOT_ID AND
    R.WORKORDER_SUB_ID = O.WORKORDER_SUB_ID
INNER JOIN PART P ON
    P.ID = R.PART_ID
    WHERE O.RESOURCE_ID LIKE '%17%'
    AND P.ID LIKE '%[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9]'
    AND P.DESCRIPTION NOT LIKE '%OBS%'
    AND O.STATUS_EFF_DATE > GETDATE() - 365*2

1 个答案:

答案 0 :(得分:4)

你说的方式是,你想要去除最后五个字符。有两种方法可以做到这一点。一,除了最后五个字符之外,只需要拉掉所有字符,另一个是使用REVERSE,拉出前5个,然后再翻转REVERSE。你在你的例子中做了后者,但这是另一种选择:

SELECT SUBSTRING(@string, 1, LEN(@string) - 5)

这不是你想要的吗?