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
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;
8条答案
按热度按时间fslejnso1#
用途
在where子句中。
fsi0uk1n2#
这似乎行得通:
它表示第一个值、第二个值、第三个值等。
说明:
内部的
substring_index
返回用逗号分隔的前n个值。因此,如果原始字符串是“34,7,23,89”,则substring_index( context,',', 3)
返回“34,7,23”。外部的
substring_index
取内部的substring_index
返回的值,-1
允许你取最后一个值,所以你从“34,7,23”中得到“23”。如果您指定
-2
,则会得到“7,23”,而不是-1
,因为它取最后两个值。示例:
这里,
prices
是MyTable
中的列的名称。w3nuxt5m3#
通常,substring_index会执行您想要的操作:
kcugc4gi4#
您可以通过使用MySQL REGEXP或LIKE来获得所需的内容。
请参阅MySQL Docs on Pattern Matching
wmomyfyw5#
作为补充,我有如下形式的字符串:有些话303
我想把数字部分从字符串尾部分离出来。这似乎指向了一个可能的解决方案:
http://lists.mysql.com/mysql/222421
然而,问题是您只得到了答案“是的,它匹配”,而不是regexp匹配的开始索引。
nlejzf6q6#
这里是我在相关问题上发布的另一个变体。
REGEX
检查是否越界是有用的,所以对于表列,你可以把它放在where子句中。SUBSTRING_INDEX(string, delim, n)
返回第一个nSUBSTRING_INDEX(string, delim, -1)
仅返回最后一个REGEXP '((delim).*){n}'
检查是否有n个分隔符(即您在边界内)63lcw9qa7#
在@Oleksiy的答案的基础上,这里有一个可以处理可变段长度(在合理的范围内)的字符串,例如逗号分隔的地址:
6ljaweal8#
它的工作..