【问题标题】:Sorting SQL by first two characters of fields按字段的前两个字符对 SQL 进行排序
【发布时间】:2010-12-15 12:57:44
【问题描述】:

我正在尝试按销售人员姓名首字母对一些数据进行排序,销售代表字段长度为 3 个字符,并且是名字、姓氏和帐户类型。所以,Bob Smith 是 BS*,我只需要按前两个字符排序。

如何提取某个代表的所有数据,其中字段的前两个字符等于 BS?

【问题讨论】:

  • Mysql,对不起,我应该指定的。命名约定不是我制定的,我刚开始在这个地方工作。我知道这将成为未来的一个问题:\

标签: sql mysql sorting


【解决方案1】:

在某些数据库中您实际上可以做到

select * from SalesRep order by substring(SalesRepID, 1, 2)

其他需要你

select *, Substring(SalesRepID, 1, 2) as foo from SalesRep order by foo

在其他情况下,您根本无法做到这一点(但在您从数据库中获取输出后,您必须在程序代码中对输出进行排序)。

补充:如果您实际上只需要一位销售代表的数据,请按照其他人的建议进行操作。否则,要么你想sort by 那个东西,要么group by 那个东西。

【讨论】:

    【解决方案2】:

    这个呢

    SELECT * FROM SalesTable WHERE SalesRepField LIKE 'BS_'
    

    【讨论】:

    • 这行得通,但我最终改用了 LIKE 'BS%'。我不确定它们是否完全相同,但无论如何感谢您的帮助。
    • LIKE 'BS%' 将匹配 BS 之后的任意数量的字符。 LIKE 'BS_' 只会匹配 BS 之后的任何单个字符。
    【解决方案3】:

    我希望您永远不会遇到两个碰巧有相同姓名首字母的销售代表。

    另外,排序和过滤是两个完全不同的东西。您在问题标题和第一段中谈论排序,但您的问题是关于过滤。由于您可以在该字段上 ORDER BY 并且无论如何它都会使用前两个字符,所以我将为您提供过滤部分的答案。

    您没有提及您的 RDBMS,但这适用于任何产品:

    SELECT
         my_columns
    FROM
         My_Table
    WHERE
         sales_rep LIKE 'BS%'
    

    如果您使用的是变量/参数,那么:

    SELECT
         my_columns
    FROM
         My_Table
    WHERE
         sales_rep LIKE @my_param + '%'
    

    你也可以使用:

    LEFT(sales_rep, 2) = 'BS'
    

    我会远离:

    SUBSTRING(sales_rep, 1, 2) = 'BS'
    

    根据您的 SQL 引擎,它可能不够聪明,无法意识到它可以在最后一个上使用索引。

    【讨论】:

    • SUBSTRING() 是 SQL 标准函数,LEFT() 不是。但两者都会给你同样的结果。
    【解决方案4】:

    您还没有说您使用的是什么 DBMS。以下将在 Oracle 中工作,在大多数其他 DBMS 中也可以使用

    1) where sales_rep like 'BS%'

    2) 其中 substr(sales_rep,1,2) = 'BS'

    【讨论】:

      【解决方案5】:
      SELECT * FROM SalesRep
      WHERE SUBSTRING(SalesRepID, 1, 2) = 'BS'
      

      你没有说你使用的是什么数据库,这在 MS SQL Server 中有效。

      【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多