mySQL - 忽略字段字符串中的字符

时间:2017-04-19 21:19:52

标签: php mysql

我从数据库中提取名单列表;

SELECT * FROM people ORDER BY name ASC

然而,有些名称与[Mod]John类似,而且这些名称都在列表的末尾而不是按字母顺序排列,因为从[开始

在排序我的名字时是否有一种简单的方法可以忽略[mod]部分,但仍然可以拉入条目?所以我的名单中还有John?

拔出后我需要使用PHP对它们进行排序吗?

6 个答案:

答案 0 :(得分:1)

congfigurePath()

(请检查语法)但基本上使用替换功能

答案 1 :(得分:1)

用空字符串替换[Mod]标签:

SELECT *, replace(name,'[mod]','') as sortname FROM people order by sortname ASC

答案 2 :(得分:0)

您可以这样做 - 使用NOT LIKE - 如果您尝试排除以' [mod]'开头的名称:

SELECT * FROM people WHERE name NOT LIKE '[mod]%';

修改:在LIKE的开头删除了%。

答案 3 :(得分:0)

您没有提及您当前使用的排序规则。您还忘了解释您希望如何排序 - 您是否希望将结果排序为' [mod]'不在那里?或者基于ASCII表中字符的顺序?

' ['字符(0x5B)出现在ASCII中的小写字母之前,但在大写字母之后。所以要根据ASCII字符代码进行排序:

1)使用区分大小写的排序

2)按`lower(name)ASC

排序

3)按名称排序' [mod]%' DESC,名称ASC

如果您只是想忽略它以进行排序:

ORDER BY REPLACE(姓名,' [mod]','')ASC

答案 4 :(得分:0)

我会使用MySQL SUBSTRING_INDEX函数。 e.g。

 ORDER BY SUBSTRING_INDEX(name,']',-1)

这将从字符串的末尾开始,向后看,直到找到分隔符,在本例中为右方括号。当它找到分隔符时,它返回到目前为止的所有内容,直到(或返回)分隔符。如果找不到分隔符,则返回整个字符串。

我们可以在SELECT列表中测试表达式,以便在将它包含在ORDER BY中之前更好地观察行为。

作为示范:

SELECT t.name
     , SUBSTRING_INDEX(t.name,']',-1) AS x_mod
  FROM ( SELECT '[mod]john' AS name
         UNION ALL SELECT 'james'
         UNION ALL SELECT 'jude'
       ) t 
 ORDER BY 2

返回

name       x_mod   
---------  --------
james      james   
[mod]john  john    
jude       jude    

答案 5 :(得分:0)

使用:

SELECT * FROM people ORDER by REPLACE(name, '[mod]', '');

(这适用于mysql)