我在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_
但是对于第二个和第四个,它不适用于长度。我想我必须使用正则表达式,但我不知道如何使用它。
答案 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}$
检查。