我在mysql
数据库中有一个VARCHAR(名字带有名字和姓氏,例如:John Snow)。我想按姓氏排序(按字母顺序排列)。
我可以在SQL请求中添加“ORDER BY SECOND WORD”之类的内容吗?
谢谢
答案 0 :(得分:1)
不确定。一种方法是:
order by substring_index(name, ' ', -1)
请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会抛弃确切的第二个单词匹配,但这将适用于那些。
答案 1 :(得分:0)
如果保证firstname和lastname之间有一个空格,您可以执行类似
的操作select
[fullname]
, SUBSTRING_INDEX(fullname, ' ', 1) as [firstname]
, SUBSTRING_INDEX(fullname, ' ', -1) as [lastname]
from <table>
order by [lastname]
填写正确的表格和列名称。
答案 2 :(得分:0)
正如其他人已经提到的那样,您可以使用ORDER BY SECOND WORD
函数在第一个空格后使用零件对结果进行排序。
在您的情况下,ORDER BY substring_index(name, ' ', -1)
会转换为FIRST_NAME<space>LAST_NAME
但我不会那样做因为:
a = 'One house in the middle of three woods'
s = a.split()
o = []
for word in s:
try:
o += [str(w2n.word_to_number(word))]
except ValueError:
o += [word]
print(' '.join(o))
output:: '1 house in the middle of 3 woods'
格式。如果你可以改变数据库的模式,那么对于名字和姓氏(可能是中间名),最好有两个单独的列。这将处理#1,因为您可以保证对姓氏而不是中间名进行排序。要解决#2,您始终可以在姓氏列上创建B树索引以加快排序速度。
答案 3 :(得分:0)
该问题专门要求按“第二个单词”进行排序。给出的某些答案按最后一个单词而不是第二个单词排序。要按“全名”字段的第二个单词排序,请使用以下...
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1)
更笼统地说,要从包含由定界符DELIM分隔的值的字符串VALUES中选择第N个值,请使用以下代码...
SUBSTRING_INDEX( SUBSTRING_INDEX( VALUES, DELIM, N ), DELIM, -1 )