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

这里的技术是共享的

You are here

关于mysql的substring_index函数

shiping1 的头像
函数说明:
SUBSTRING_INDEX(str,delim,count) 返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串。如果 count 是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。如果 count 是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符。


举例:
[color=darkblue][/color]
mysql> select postId,substring_index(postId,'|',2) from user_resumetbl order by id desc limit 10;
+------------+-------------------------------+
| postId     | substring_index(postId,'|',2) |
+------------+-------------------------------+
| |79        | |79                           |
| |76|36|42  | |76                           |
| |672|66|73 | |672                          |

说明:
以上例子中substring_index(postId,'|',2)意思是,返回postId字段中第二个出现“|”字符的左边的字符串,如果找不到,就返回所有

来自 http://y-zjx.iteye.com/blog/1127128



mysql的函数 SUBSTRING_INDEX


我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,

想得到的结果如下:
id name
3 test3
1 test1
5 test5

请问在这样的SQL在Mysql中怎么写?
网上查到sqlserver中可以用order by charindex解决,但是没看到Mysql怎么解决??请高手帮忙,谢

谢!

select * from a order by substring_index('3,1,2',id,1);

试下这个good,ls正解。
order by find_in_set(id,'3,1,5')

谢谢,经测试order by substring_index和order by find_in_set都可以
来自 http://blog.csdn.net/design321/article/details/8664339

 

mysql id in 排列问题

SELECT * FROM szmg0112.cms_archives c where id in(13934,13914,13915,13923,13910,13891,13920,13882,13937,13924,13881) order by substring_index('13934,13914,13915,13923,13910,13891,13920,13882,13937,13924,13881',id,1)

语句可以根据id里面的顺序来排列查询。

select id from table where id in (2,1,3,5) order by field(id,2,1,3,5)


mysql in 默认的排序

select id from table where id in (2,1,3,5);

查出来的结果是:1 2 3 5
但是有的时候是要:2 1 3 5
这就需要做排序的时候做处理,网上有2种方法,但是没有详细的解释。查了下手册,记下方便自己以后查找。
select id from table where id in (2,1,3,5) order by substring_index('2,1,3,5',id,1);
substring_index(str,delim,count) 字符串截取函数
str 要截取的字符串 delim 截取的分割符 count 截取的数量
返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
那 order by substring_index(‘2,1,3,5′,id,1) 这个啥意思呢
这个是在字符串’2,1,3,5′里查找id,如果找不到,就返回整个字符串

select id from table where id in (2,1,3,5) order by find_inset(id,'2,1,3,5')
find_in_set(str,strlist)
字符串函数
如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。如果str不是在strlist里面或如果strlist是空字符串,返回0。

SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
所以 find_in_set返回的是一个1到N的值,在order by的话,就是按顺序排了。

此句测试中id为主键,type一直为all,不知是有优化方法?

来自 http://hi.baidu.com/ndlli/item/96db5f35e75fbdf1e6bb7a41

 


普通分类: