【问题标题】:Sort Everything After A Specific Character in SQL在 SQL 中按特定字符对所有内容进行排序
【发布时间】:2014-09-04 03:35:55
【问题描述】:

我需要在空格使用 SQL 之后对所有内容进行排序。在下面的示例中,我希望它从姓氏开始排序(升序)。

美国-J。能源部
美国-M。鼠标
美国-A。鼠标
美国-D。鸭
美国-P。黑豹
美国-T。鸟

我需要它来对整个字符串进行排序,但要对姓氏进行排序。如果有两个相同的姓氏,我希望它考虑名字的首字母。结果是:

美国-T。鸟
美国-J。能源部
美国-D。鸭
美国-A。鼠标
美国-M。鼠标
美国-P。黑豹

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

希望有人能完整回答这个问题。无论出于何种原因,有人在这个问题上给我打了-1分。我不知道为什么。我一直很具体,但我无法找到最后一部分的答案——如果姓氏相同,则按第一个字母排序。

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

【问题讨论】:

  • 你用的是什么数据库?
  • 这似乎没有考虑名字(由名字的第一个字母表示)。在示例中,有 A. Mouse 和 M. Mouse。我错了吗?
  • 我需要在 SQL Server 和 MS Access 中使用此代码。
  • 。 .我不相信有任何方法可以使用在两个数据库中都可以使用的基本 SQL 来编写它。
  • @Beckie 您需要展示您尝试解决问题的方法。你没有表现出任何解决它的尝试。我想这是downvote(-1)的原因。

标签: sql sql-server ms-access


【解决方案1】:

这取决于数据库。以下是您可以在 SQL Server 中执行此操作的方法:

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

类似的逻辑在其他数据库中工作,但功能不同。

例如,在 Oracle 中:

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

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

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

在 MS Access 中:

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

【讨论】:

    【解决方案2】:

    对于按 lasname 排序,你需要在 SQL server 中使用这样的名字:

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

    访问中

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

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 2015-11-27
      • 1970-01-01
      • 2021-07-19
      • 2020-11-05
      • 1970-01-01
      • 2013-06-11
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多