我正在尝试按销售人员姓名首字母对某些数据进行排序,而销售代表字段的长度为3个字符,并且是名字,姓氏和帐户类型。所以,鲍勃史密斯将是BS *,我只需要按前两个字符排序。
如何提取特定代表的所有数据,其中字段的前两个字符等于BS?
答案 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。