我正在尝试将字符串的某些部分提取到单独的列中,但无法弄清楚该怎么做。我的数据库如下所示: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");
我想在数据库中创建一列以表示提取出的值,这些值将始终是上面字符串中的最后3或5,例如,这是我从上表中获得的期望输出。
我尝试过的事情:
select * SPLIT_PART(user,'/', 3) as name
FROM profile ;
在某些情况下,如果字符串在这种情况下位于正确的位置3,则此方法有效,但如果不正确,则提取错误的字符串。 编辑 该字符串没有任何公共子字符串,但是如果使它变得更容易,我真的只需要从头开始输入数字,这些是用户列中唯一的数字,例如1992/30和2000/1/12/1002总是在最后。这些数字只会位于小数点前的最后2或4位
答案 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;