2014-09-04 54 views
0

我需要对空间usig SQL后的所有内容进行排序。在下面的例子中,我希望它从姓氏开始进行排序(升序)。排序SQL中特定字符后的所有内容

USA-J。 Doe
USA-M。小鼠
USA-A。鼠标
USA-D。鸭
USA-P。 Panther
USA-T。鸟

我需要它排序整个字符串,但在最后一个名字。如果有两个相同的姓氏,我希望它考虑名字的首字母。结果将是:

USA-T。 Bird
USA-J。 Doe
USA-D。鸭
USA-A。鼠标
USA-M。 Mouse
USA-P。 Panther

我将需要在SQL Server和MS Access中使用此代码。

我希望有人能完全回答这个问题。无论出于何种原因,有人在这个问题上给我一个-1。我无法弄清楚为什么。我已经如我所知一样具体,我无法找到最终作品的答案 - 如果姓氏相同,则按第一个字母排序。

谢谢各位回复。信息有所帮助。我不得不在“名称”周围添加括号,因为该字段的名称与实际表的名称相似。

+0

什么数据库您使用的? – 2014-09-04 03:36:38

+0

这看起来并不像它需要考虑名字(由名字的第一个字母表示)。在这个例子中,有A.鼠标和M.鼠标。我错了吗? – Beckie 2014-09-04 03:46:19

+0

我将需要在SQL Server和MS Access中使用此代码。 – Beckie 2014-09-04 03:53:05

回答

2

这取决于数据库。下面是如何可能在SQL Server中做到这一点:

order by substring(name, charindex(' ', name) + 1, len(name))) 

同样的逻辑也适用于其他数据库但功能是不同的。

例如,在甲骨文:

order by substr(name, instr(name, ' ') + 1) 

而且,在MySQL中,你可以使用类似的逻辑,但这是简单的:

order by substring_index(name, ' ', -1) 

而且在MS Access:

order by mid(name, instr(name, ' ') + 1) 
0

对于按照lasname排序,您需要在SQL服务器中使用像这样的名字:

order by substring(name, charindex(' ', name) + 1, len(name))), substring(name, charindex('-', name) + 1, 1)) 

在Access

order by mid(name, instr(name, ' ') + 1), order by mid(name, instr(name, '-') + 1, 1) 
相关问题