mysql substring /从字符串中获取id

时间:2016-12-29 23:10:36

标签: mysql regex

我在MySQL DB中使用以下语法编写ID:

1_5f902d_QCwOZLEJEvHB
c6475d_1_9BAZWQeTeP1W
2_0841fe_VtfJl1DkBnPZ
1bfd49_4_dKbKktFRHP0U

我想提取主要ID(6位数)。从示例中可以看出:

 5f902d
 c6475d
 0841fe
 1bfd49

对于我在案例查询中使用的第一个和第三个例子:

(case
            WHEN length(ID) = 21 THEN RIGHT(Left(ID,8),6)
            ELSE ID     
    END
    ) as id_

但是对于第二个和第四个,它不适用于长度。我想我必须使用正则表达式,但我不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

以下内容适用于您指定的案例:

select (case when substring(id, 2, 1) = '_'
             then substring(id, 3, 6)
             else left(id, 6)
        end)

通常我会将like用于when条件,但_是转义字符,而substring()同样容易。

答案 1 :(得分:1)

您可以使用正则表达式来测试下划线的位置,然后提取适当的子字符串。

#routes
post 'some_method' => 'posts#scrape', as: :some_method

使用CASE WHEN id REGEXP '^[0-9]_.{19}$' THEN SUBSTRING(id, 3, 6) WHEN id REGEXP '^.{6}_.{14}$' THEN LEFT(id, 6) END AS id_ .{19}$结束正则表达式同时执行.{14}$检查。