我是sql的新手,我需要这样做 在MSSQL中: 我有一个简单的用户名,全名,年龄等等 全名显然是姓氏,例如“亚当·史密斯”
我只需要根据姓氏对表格进行排序。反正有吗?
答案 0 :(得分:1)
如果只有1个姓氏,则可以使用PARSENAME技巧。
此函数通常用于从对象名称中获取指定的零件。
例如,从'[mytable]'
获取'[myschema].[mydatabase].[mytable]'
。
因此它将字符串用点分隔。
您的字符串中包含空格。
当空格由点代替时,很容易通过PARSENAME从右边获得第一个元素。
SELECT *
FROM yourtable
ORDER BY parsename(replace(fullname,' ','.'),1)
但是请注意,当元素多于4个时,PARSENAME返回NULL。
答案 1 :(得分:1)
您可以将right
与charindex
和reverse
一起使用,以获取最后一个空格之后的字符串部分,如下所示:
首先,创建并填充示例表(请在您将来的问题中为我们保存此步骤):
DECLARE @T AS TABLE
(
FullName nvarchar(100)
)
INSERT INTO @T(FullName) VALUES
(N'Zohar Peled'),
(N'Amir Shahbabaie'),
(N'Madona'),
(N'Gabriel José de la Concordia García Márquez')
查询:
SELECT *
FROM @T
ORDER BY RIGHT(FullName, CHARINDEX(' ',REVERSE(FullName)))
结果:
FullName
Madona
Gabriel José de la Concordia García Márquez
Zohar Peled
Amir Shahbabaie
如您所见,如果您的字符串不是您期望的字符串(并且在处理名称时,它们很少是您期望的字符串),这也将起作用