【发布时间】:2010-12-15 12:57:44
【问题描述】:
我正在尝试按销售人员姓名首字母对一些数据进行排序,销售代表字段长度为 3 个字符,并且是名字、姓氏和帐户类型。所以,Bob Smith 是 BS*,我只需要按前两个字符排序。
如何提取某个代表的所有数据,其中字段的前两个字符等于 BS?
【问题讨论】:
-
Mysql,对不起,我应该指定的。命名约定不是我制定的,我刚开始在这个地方工作。我知道这将成为未来的一个问题:\
我正在尝试按销售人员姓名首字母对一些数据进行排序,销售代表字段长度为 3 个字符,并且是名字、姓氏和帐户类型。所以,Bob Smith 是 BS*,我只需要按前两个字符排序。
如何提取某个代表的所有数据,其中字段的前两个字符等于 BS?
【问题讨论】:
在某些数据库中您实际上可以做到
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 那个东西。
【讨论】:
这个呢
SELECT * FROM SalesTable WHERE SalesRepField LIKE 'BS_'
【讨论】:
我希望您永远不会遇到两个碰巧有相同姓名首字母的销售代表。
另外,排序和过滤是两个完全不同的东西。您在问题标题和第一段中谈论排序,但您的问题是关于过滤。由于您可以在该字段上 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 引擎,它可能不够聪明,无法意识到它可以在最后一个上使用索引。
【讨论】:
您还没有说您使用的是什么 DBMS。以下将在 Oracle 中工作,在大多数其他 DBMS 中也可以使用
1) where sales_rep like 'BS%'
2) 其中 substr(sales_rep,1,2) = 'BS'
【讨论】:
SELECT * FROM SalesRep
WHERE SUBSTRING(SalesRepID, 1, 2) = 'BS'
你没有说你使用的是什么数据库,这在 MS SQL Server 中有效。
【讨论】: