Mysql可以拆分列吗?

ZA.*_*ZA. 58 mysql split

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

1,2,3
3,2,1
4,5,6
5,5,5
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行搜索,以单独查询CSV字符串的每个值.

0<first<5   and  1<second<3  and  2<third<4 
Run Code Online (Sandbox Code Playgroud)

我知道我可以返回所有查询并自行拆分并自己进行比较.我很好奇是否有办法这样做,所以mysql做了处理工作.谢谢!

小智 50

使用

substring_index(`column`,',',1) ==> first value
substring_index(substring_index(`column`,',',-2),',',1)=> second value
substring_index(substring_index(`column`,',',-1),',',1)=> third value
Run Code Online (Sandbox Code Playgroud)

在你的where子句中.

SELECT * FROM `table`
WHERE 
substring_index(`column`,',',1)<0 
AND
substring_index(`column`,',',1)>5
Run Code Online (Sandbox Code Playgroud)

  • 我不得不使用substring_index(substring_index(`column`,',', - 1),',',1)来获取第二个值.使用-2始终给了我第一个值.虽然工作得很好.:) (3认同)

小智 22

它似乎工作:

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) )
Run Code Online (Sandbox Code Playgroud)

它表示第一个值,第二个,第三个等.

说明:

inner substring_index返回以逗号分隔的前n个值.因此,如果您的原始字符串是"34,7,23,89",则substring_index( context,',', 3)返回"34,7,23".
外部substring_index获取内部返回的值substring_index,-1允许您获取最后一个值.所以你从"34,7,23"得到"23".
而不是-1如果你指定-2,你将得到"7,23",因为它采用了最后两个值.

例:

select * from MyTable where substring_index(substring_index(prices,',',1),',',-1)=3382;
Run Code Online (Sandbox Code Playgroud)

这里prices是列中的列名MyTable.

  • 鉴于其指数更加结构化,这是更清晰的答案。 (2认同)

小智 9

通常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)
Run Code Online (Sandbox Code Playgroud)


Dam*_*amo 4

您可以使用 MySQL REGEXP 或 LIKE 获得您想要的东西。

请参阅有关模式匹配的 MySQL 文档