Mysql/php按varchar的第二个字排序
我有一个名为VARCHARname和姓为firstname的人,例如:mysql数据库中的John Snow。我想按姓氏字母顺序排序 我可以在SQL请求中添加类似“按第二个单词排序”的内容吗Mysql/php按varchar的第二个字排序,php,mysql,sql,word,Php,Mysql,Sql,Word,我有一个名为VARCHARname和姓为firstname的人,例如:mysql数据库中的John Snow。我想按姓氏字母顺序排序 我可以在SQL请求中添加类似“按第二个单词排序”的内容吗 谢谢你当然可以。一种方法是: order by substring_index(name, ' ', -1) 请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会偏离精确的第二个单词匹配,但这将适用于这些词。如果保证名字和姓氏之间只有一个空格,则可以执行以下操作 select [fu
谢谢你当然可以。一种方法是:
order by substring_index(name, ' ', -1)
请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会偏离精确的第二个单词匹配,但这将适用于这些词。如果保证名字和姓氏之间只有一个空格,则可以执行以下操作
select
[fullname]
, SUBSTRING_INDEX(fullname, ' ', 1) as [firstname]
, SUBSTRING_INDEX(fullname, ' ', -1) as [lastname]
from <table>
order by [lastname]
填写正确的表格和列名。正如其他人已经提到的,您可以使用substring\u index函数使用第一个空格后的部分对结果进行排序 在本例中,按第二个单词排序将转换为按子字符串_indexname,,-1排序 但我不会这么做,因为: 这是不可靠的,因为在现实生活中,您不能保证数据集中的所有名称都遵循FIRST_NAMELAST_NAME格式。 根据数据集的大小,速度可能会非常慢。
如果您可以更改数据库的模式,最好为名字和姓氏以及可能的中间名设置两个单独的列。这将处理1,因为您将保证订购时使用姓氏,而不是中间名。要解决2,您始终可以在姓氏列上创建B树索引以加快排序。问题特别要求按第二个单词排序。有些答案按最后一个词排序,而不是第二个词。要按字段全名的第二个字排序,请使用下面的
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1)
SUBSTRING_INDEX( SUBSTRING_INDEX( VALUES, DELIM, N ), DELIM, -1 )
更一般地说,要从包含由分隔符DELIM分隔的值的字符串值中选择第N个值,请使用下面的
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1)
SUBSTRING_INDEX( SUBSTRING_INDEX( VALUES, DELIM, N ), DELIM, -1 )
有关更多信息,请参阅关于亚瑟·C·克拉克、安娜·达席尔瓦或奥斯卡·德拉霍亚的人的情况如何?否。首先创建两个字段;苏尔;按sur字段排序。