将列一分为二并在mssql中排序

时间:2018-11-07 09:34:11

标签: sql-server select

我是sql的新手,我需要这样做 在MSSQL中: 我有一个简单的用户名,全名,年龄等等 全名显然是姓氏,例如“亚当·史密斯”

我只需要根据姓氏对表格进行排序。反正有吗?

2 个答案:

答案 0 :(得分:1)

如果只有1个姓氏,则可以使用PARSENAME技巧。

此函数通常用于从对象名称中获取指定的零件。
例如,从'[mytable]'获取'[myschema].[mydatabase].[mytable]'
因此它将字符串用点分隔。

您的字符串中包含空格。
当空格由点代替时,很容易通过PARSENAME从右边获得第一个元素。

SELECT *
FROM yourtable
ORDER BY parsename(replace(fullname,' ','.'),1)

但是请注意,当元素多于4个时,PARSENAME返回NULL。

答案 1 :(得分:1)

您可以将rightcharindexreverse一起使用,以获取最后一个空格之后的字符串部分,如下所示:

首先,创建并填充示例表(在您将来的问题中为我们保存此步骤):

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

如您所见,如果您的字符串不是您期望的字符串(并且在处理名称时,它们很少是您期望的字符串),这也将起作用