我有一系列零件编号,通常只有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
答案 0 :(得分:4)
你说的方式是,你想要去除最后五个字符。有两种方法可以做到这一点。一,除了最后五个字符之外,只需要拉掉所有字符,另一个是使用REVERSE,拉出前5个,然后再翻转REVERSE。你在你的例子中做了后者,但这是另一种选择:
SELECT SUBSTRING(@string, 1, LEN(@string) - 5)
这不是你想要的吗?