按字段的前两个字符对SQL进行排序

时间:2009-11-11 16:30:39

标签: sql mysql sorting

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

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

5 个答案:

答案 0 :(得分:12)

在某些数据库中,您可以实际执行

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

Othere要求你

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

在其他人中,你完全不能这样做(但是从数据库中获取后,必须在程序代码中对输出进行排序)。

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

答案 1 :(得分:3)

这个怎么样?

SELECT * FROM SalesTable WHERE SalesRepField LIKE 'BS_'

答案 2 :(得分:1)

您还没有说过您正在使用的DBMS。以下内容适用于Oracle,大多数其他DBMS中都有类似内容

1)其中sales_rep类似'BS%'

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

答案 3 :(得分:1)

我希望你永远不会有两个碰巧有相同名字的销售代表。

此外,排序和过滤是两个完全不同的事情。你谈到在问题标题和第一段中排序,但你的问题是关于过滤。既然您可以在字段上进行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引擎,它可能不够聪明,无法意识到它可以在最后一个上使用索引。

答案 4 :(得分:0)

SELECT * FROM SalesRep
WHERE SUBSTRING(SalesRepID, 1, 2) = 'BS'

您没有说明您使用的数据库,这适用于MS SQL Server。