我在mysql
数据库中有一个VARCHAR(名字,姓氏和姓氏,例如:John Snow)。我想按姓氏排序(按字母顺序排列)。
我可以在SQL请求中添加“ORDER BY SECOND WORD”之类的内容吗?
谢谢
当然。一种方法是:
order by substring_index(name, ' ', -1)
请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会剔除确切的第二个单词匹配,但这将适用于那些。
如果保证在firstname和lastname之间有一个空格,你可以做类似的事情
select
[fullname]
, SUBSTRING_INDEX(fullname, ' ', 1) as [firstname]
, SUBSTRING_INDEX(fullname, ' ', -1) as [lastname]
from <table>
order by [lastname]
填写正确的表和列名称。
正如其他人已经提到的那样,您可以使用substring_index
函数在第一个空格后使用零件对结果进行排序。
在你的情况下,ORDER BY SECOND WORD
将转换为ORDER BY substring_index(name, ' ', -1)
但我不这样做是因为:
FIRST_NAME<space>LAST_NAME
格式。如果你可以改变数据库的模式,最好有两个单独的列,用于名字和姓氏(可能是中间名)。这将处理#1,因为您将保证对姓氏而不是中间名进行排序。要解决#2,您始终可以在姓氏列上创建B树索引以加快排序速度。