查询以获取列中的最后一项

时间:2018-02-08 16:23:34

标签: sql

我有一张这样的表

ID       TYPE
12266   XXL1L;XXL1L
34153   TOLT40ND;TOLT40ND
63939   TOLT40ND;TOLT40ND;POSTHT128
63940   TOLT20ND;TOLT20ND
90908   TOLT40ND;TOLT40ND;POSTHT128 
90909   TOLT40ND;TOLT40ND;POSTHT128
59121   TOLT30ND;TOLT30ND;MAR1639L;MAR1639L
59131   MAR1639L;MAR1639L
152472  TOLT30ND;TOLT30ND

我只需要Type

中的最后一项

这是一个结果表

ID      TYPE  
12266   XXL1L
34153   TOLT40ND
63939   POSTHT128
63940   TOLT20ND
90908   POSTHT128   
90909   POSTHT128
59121   MAR1639L
59131   MAR1639L
15247   TOLT30ND

2 个答案:

答案 0 :(得分:1)

这会根据您使用的平台而有所改变,但是可以在所有平台上运行的想法是执行以下操作:反转字符串并找到第一个;的位置然后在正常的字符串中取那个大小的正确字符。所以函数名称从平台变为平台,但类似这样的

  RIGHT(TYPE, STRPOS(REVERSE(TYPE),';'))

注意...... aaron指出你可能需要从strpos的返回中减去一个不包括';'在输出中。

答案 1 :(得分:0)

这就是我在SQL Server中要做的事情:

WITH test AS
(
    SELECT  12266 ID,   'XXL1L;XXL1L' Type UNION all
    SELECT  34153 ,  'TOLT40ND;TOLT40ND' UNION all
    SELECT  63939 ,  'TOLT40ND;TOLT40ND;POSTHT128' UNION all
    SELECT  63940 ,  'TOLT20ND;TOLT20ND' UNION all
    SELECT  90908 ,  'TOLT40ND;TOLT40ND;POSTHT128' UNION all 
    SELECT  90909 ,  'TOLT40ND;TOLT40ND;POSTHT128' UNION all
    SELECT  59121 ,  'TOLT30ND;TOLT30ND;MAR1639L;MAR1639L' UNION all
    SELECT  59131 ,  'MAR1639L;MAR1639L' UNION all
    SELECT  152472,  'TOLT30ND;TOLT30ND' UNION ALL
    SELECT  123, 'TEST;;TEST'
)

SELECT  SUBSTRING(test.Type, LEN(test.Type) + 2 - CHARINDEX(';', REVERSE(test.Type)), LEN(test.Type)) 
FROM    test