我有一个以逗号分隔数据的列:
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)
小智 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.
小智 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)