我从数据库中提取名单列表;
SELECT * FROM people ORDER BY name ASC
然而,有些名称与[Mod]John
类似,而且这些名称都在列表的末尾而不是按字母顺序排列,因为从[
开始
在排序我的名字时是否有一种简单的方法可以忽略[mod]
部分,但仍然可以拉入条目?所以我的名单中还有John?
拔出后我需要使用PHP对它们进行排序吗?
答案 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)