将子字符串提取到单独的列中SQL

时间:2019-05-17 11:29:48

标签: mysql sql substring

我正在尝试将字符串的某些部分提取到单独的列中,但无法弄清楚该怎么做。我的数据库如下所示:http://sqlfiddle.com/#!9/10084a9/2

`CREATE TABLE IF NOT EXISTS `profile` (
  `user` varchar(200) NOT NULL
) DEFAULT CHARSET=utf8;

INSERT INTO `profile` (`user`) VALUES
  ("history/myprofile/Alice/1992/30.pdf"),
  ("location/area/active/Nyme/2000/1/12/1002");

enter image description here 我想在数据库中创建一列以表示提取出的值,这些值将始终是上面字符串中的最后3或5,例如,这是我从上表中获得的期望输出。

enter image description here

我尝试过的事情:

select * SPLIT_PART(user,'/', 3) as name
FROM profile ;

在某些情况下,如果字符串在这种情况下位于正确的位置3,则此方法有效,但如果不正确,则提取错误的字符串。 编辑 该字符串没有任何公共子字符串,但是如果使它变得更容易,我真的只需要从头开始输入数字,这些是用户列中唯一的数字,例如1992/30和2000/1/12/1002总是在最后。这些数字只会位于小数点前的最后2或4位

1 个答案:

答案 0 :(得分:0)

您可以使用SUBSTRING_INDEX来实现这一点,并尝试在下面的示例查询中进行操作,但是您需要具有标准值来解决该问题。

SELECT user, SUBSTRING_INDEX(SUBSTRING_INDEX(user, '/', 1), '/', -1) as name,
     SUBSTRING_INDEX(SUBSTRING_INDEX(user, '/', 2), '/', -1) as year,
     SUBSTRING_INDEX(SUBSTRING_INDEX(user, '/', 3), '/', -1) as batch,
     SUBSTRING_INDEX(SUBSTRING_INDEX(user, '/', 4), '/', -1) as status,
     SUBSTRING_INDEX(SUBSTRING_INDEX(user, '/', 5), '/', -1) as value
FROM profile;

SQL FIDDLE