可以Mysql分割一列吗?

我有一列用逗号分隔的数据:

1,2,3 3,2,1 4,5,6 5,5,5 

我试图运行一个search,将单独查询每个CSVstring的值。

 0<first<5 and 1<second<3 and 2<third<4 

我得到,我可以返回所有的查询和自己分裂,并自己比较。 我很好奇,如果有办法做到这一点,所以MySQL的处理工作。 谢谢!

使用

 substring_index(`column`,',',1) ==> first value substring_index(substring_index(`column`,',',-2),',',1)=> second value substring_index(substring_index(`column`,',',-1),',',1)=> third value 

在你的where子句中。

 SELECT * FROM `table` WHERE substring_index(`column`,',',1)<0 AND substring_index(`column`,',',1)>5 

它似乎工作:

substring_index(substring_index(context,',',1),',',-1))
substring_index(substring_index(context,',',2),',',-1))
substring_index(substring_index(context,',',3),',',-1))
substring_index(substring_index(context,',',4),',',-1))

这意味着第一个值,第二个,第三个等等

说明:
inner substring_index返回逗号分隔的前n个值。 所以如果你的原始string是“34,7,23,89”, substring_index( context,',', 3)返回“34,7,23”。
外部substring_index接受内部substring_index返回的值, -1允许你取最后一个值。 所以你从“34,7,23”得到“23”。
如果指定-2 ,而不是-1 ,则会得到“7,23”,因为它取最后两个值。

例:
select * from MyTable where substring_index(substring_index(prices,',',1),',',-1)=3382;
这里, pricesMyTable列的名称。

通常substring_index做你想要的:

 mysql> select substring_index("foo@gmail.com","@",-1); +-----------------------------------------+ | substring_index("foo@gmail.com","@",-1) | +-----------------------------------------+ | gmail.com | +-----------------------------------------+ 1 row in set (0.00 sec) 

你可以通过使用MySQL REGEXP或者LIKE来得到你想要的。

查看模式匹配的MySQL文档

作为这个的附录,我有一些forms的string:有些字是303

我想从string的尾部分开数字部分。 这似乎指向一个可能的解决scheme:

http://lists.mysql.com/mysql/222421

然而问题是,你只能得到答案“是的,它匹配”,而不是正则expression式匹配的开始索引。

这是我发布在相关问题上的另一个变体。 REGEX检查以查看是否超出范围是有用的,因此对于表列,可以将其放在where子句中。

 SET @Array = 'one,two,three,four'; SET @ArrayIndex = 2; SELECT CASE WHEN @Array REGEXP CONCAT('((,).*){',@ArrayIndex,'}') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@Array,',',@ArrayIndex+1),',',-1) ELSE NULL END AS Result; 
  • SUBSTRING_INDEX(string, delim, n)返回第一个n
  • SUBSTRING_INDEX(string, delim, -1)只返回最后一个
  • REGEXP '((delim).*){n}'检查是否有n个分隔符(即你在界限内)

这是工作..

 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(col,'1', 1), '2', 1), '3', 1), '4', 1), '5', 1), '6', 1) , '7', 1), '8', 1), '9', 1), '0', 1) as new_col FROM table_name group by new_col;