1,2,3
3,2,1
4,5,6
5,5,5
我知道我可以返回所有查询并将其拆分并自己进行比较。
我很好奇是否有一种方法可以使mysql做到这一点处理工作。
谢谢!
#1 楼
在您的where子句中使用substring_index(`column`,',',1) ==> first value
substring_index(substring_index(`column`,',',-2),',',1)=> second value
substring_index(substring_index(`column`,',',-1),',',1)=> third value
。
SELECT * FROM `table`
WHERE
substring_index(`column`,',',1)<0
AND
substring_index(`column`,',',1)>5
#2 楼
似乎有效: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)
它表示第一个值,第二个,第三个值,等等。
说明:
内部
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;
这里,
prices
是MyTable
中的列的名称。评论
鉴于索引的结构更合理,这是一个更清晰的答案。
–汤姆
17年11月10日在10:04
#3 楼
通常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)
#4 楼
您可以通过使用MySQL REGEXP或LIKE来获得所需的内容。请参阅有关模式匹配的MySQL文档
#5 楼
作为补充,我有以下形式的字符串:一些单词303
,我想从字符串的尾部分离出数字部分。
这似乎指向可能的解决方案:
http://lists.mysql.com/mysql/222421
但是,问题是,您只能得到答案“是,它匹配”,而不是正则表达式匹配的开始索引。
#6 楼
这是我在相关问题上发布的另一个变体。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)
返回最后一个n REGEXP '((delim).*){n}'
检查是否有n个定界符(即,您在边界内)#7 楼
正在工作..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;
评论
我必须使用substring_index(substring_index(column,',',-1),',',1)来获取第二个值。始终使用-2给我第一个价值。不过效果很好。 :)
–本杰明·阿曼
13年1月10日,0:28
当您添加更多行时,此答案中的索引会有些混乱。
–汤姆
17年10月10日在10:03
很好的解决方案。工作了。谢谢!
– Flavio
19年7月16日在12:17