欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

mysql 返回某个字符在一字符串中第n次 第几次 出现的位置[复制链接] 有大用

mysql 返回某个字符在一字符串中第n次出现的位置

[复制链接]
论坛徽章:
3
天枰座
日期:2016-01-08 11:40:13秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:06:46
跳转到指定楼层
1#
 
 发表于 2016-3-10 11:55 | 只看该作者 回帖奖励
mysql 返回某个字符在一字符串中第n次出现的位置:
类似于oracle的instr:
instr(string1,string2[,start_position[,nth_appearence]])

string1:要在此字符串中查找。

string2:要在string1中查找的字符串。

start_position:从string1开始查找的位置。可选,默认为1,正数时,从左到右检索,负数时,从右到左检索。

nth_appearence:查找第几次出现string2。可选,默认为1,不能为负。
这个函数在mysql中怎么表示?
感谢回复。
 
 
 
  
论坛徽章:
3
2013年新春福章
日期:2013-02-25 14:51:24秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:06:46
2#
 
 发表于 2016-3-17 18:03 | 只看该作者
select SUBSTRING_INDEX('bcdabcadd','a',1)

这个函数会根据'a'分割字符串,并根据分割的块返回第几个块之前的数据。

如果按照: 返回某个字符在一字符串中第n次出现的位置,

那就是返回分割块之前的字符串,然后+1就是分割的位置:
select length(SUBSTRING_INDEX('bcdabcadd','a',1))+1
 
 
 
 
 
  
论坛徽章:
393
雪佛兰
日期:2013-12-04 20:30:02马上有钱
日期:2014-03-11 11:59:122014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55马上有钱
日期:2014-03-11 11:59:12马上有钱
日期:2014-03-11 11:59:12
3#
 
 发表于 2016-3-19 17:17 | 只看该作者
kofjk1000 发表于 2016-3-17 18:03 
select SUBSTRING_INDEX('bcdabcadd','a',1)

这个函数会根据'a'分割字符串,并根据分割的块返回第几个块 ...

不错,但有个问题
mysql> select length(SUBSTRING_INDEX('bcdabcadd','a',3))+1;
+----------------------------------------------+
| length(SUBSTRING_INDEX('bcdabcadd','a',3))+1 |
+----------------------------------------------+
|                                           10 |
+----------------------------------------------+
 
 
 
 
 
  
论坛徽章:
3
2013年新春福章
日期:2013-02-25 14:51:24秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:06:46
4#
 
 发表于 2016-3-21 17:08 | 只看该作者
赞~

没有考虑范围问题。

那就换种方式,原方式判断后太麻烦:

切换后定位,减一就是位置。

select locate(SUBSTRING_INDEX('bcdabcadd','a',3),'bcdabcadd')-1











 
 
 
 
 
 
  
认证徽章
 
论坛徽章:
5
处女座
日期:2016-04-18 20:47:50秀才
日期:2016-02-18 10:06:46处女座
日期:2016-04-18 20:47:50秀才
日期:2016-02-18 10:06:46ITPUB15周年纪念
日期:2016-10-13 13:15:34
5#
 
 发表于 2016-3-23 15:37 | 只看该作者
自己写function 也能处理  不清楚性能有没有什么大问题

来自  http://www.itpub.net/forum.php?mod=viewthread&tid=2054430

普通分类: