首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL选择字符串的一部分并按该部分排序

MYSQL选择字符串的一部分并按该部分排序
EN

Stack Overflow用户
提问于 2011-06-25 12:57:57
回答 4查看 6K关注 0票数 10

我有一个这样的信息字段"web-1/1.,web-2/2.,web-3/3.,web-4/4.,web-5/5“。其他寄存器可以有不同的值,如"web-1/4.,web-2/5.,web-3/1.,web-4/2.,web-5/3“。

我想选择并排序,比方说web-2/?将是web-2/1、web-2/2、web-2/3等所有包含web-2的字段,并按最后一个数字排序

我想创建一个特色属性脚本不同的网站,并指定功能编号。不同的属性,不同的网站,不同的顺序

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-25 13:08:40

我建议您查看MySQL String Functions,更具体地说是SUBSTRING_INDEX函数。我之所以建议使用这个而不是SUBSTRING,是因为斜杠之前或之后的数字可能不止一个数字,这会导致第一部分和/或第二部分的长度不同。

示例:

代码语言:javascript
复制
SELECT   `info`,
         SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
         SUBSTRING_INDEX(`info`, '/', -1) AS `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;

结果:

附加示例

在本例中,我使用CAST将第二部分转换为无符号整数,以防它包含额外的字符,如符号或字母。换句话说,“web-4/15”的第二部分。将是"15“,”web-4/15*“的第二部分也将是"15”。

代码语言:javascript
复制
SELECT   `info`,
          SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
          CAST(SUBSTRING_INDEX(`info`, '/', -1) AS UNSIGNED) `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;
票数 14
EN

Stack Overflow用户

发布于 2011-06-25 13:20:49

如果字符串总是与您描述的模式匹配,我们可以假设您要排序的第一个值是字符串中的索引位置5(从左起5个字符)。第二个字符是索引7。考虑到这一点,您可以执行以下操作,假设字符串'web-2/1‘位于名为field的字段中:

代码语言:javascript
复制
SELECT
  `field`
FROM
  `table`
ORDER BY
  substr(`field`, 5, 1) ASC,
  substr(`field`, 7, 1) ASC;

substr()函数将字段作为第一个选项、我们上面提到的索引和一个选项第三个参数,该参数是从第二个选项开始要包含的字符数。

如果字符串稍有偏差,您可以根据需要对其进行调整,主要内容是subtr()函数中的第二个选项。

票数 0
EN

Stack Overflow用户

发布于 2016-05-23 04:41:01

只需添加:...ORDER BY SUBSTRING(username, 2) ASC

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6475936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档