2009-11-11 3 views
4

Я пытаюсь отсортировать некоторые данные по инициалам продавцов, а поле продаж - 3 символа, и это имя, фамилия и тип учетной записи. Таким образом, Боб Смит будет BS *, и мне просто нужно отсортировать первые два символа.Сортировка SQL по первым двум символам полей

Как я могу вытащить все данные для определенной репутации, где первые два символа поля равны BS?

+0

Какую базу вы используете? –

+0

Mysql, Извините, я должен был указать. Соглашение об именовании - это то, что я поставил на место, я только начал работать в этом месте. Я понимаю, что это будет проблемой в будущем: \ – adam

ответ

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

Вы не сказали, какую базу данных вы использовали, это работает в MS SQL Server.

+0

Это должно работать и в MySQL, а затем в соответствии с http://dev.mysql.com/doc/refman/5.1/en/string-functions.html# function_substr –

3

Что об этом

SELECT * FROM SalesTable WHERE SalesRepField LIKE 'BS_' 
+0

Это сработало, но вместо этого я использовал LIKE 'BS%'. Я не уверен, что они точно такие же, но спасибо за вашу помощь. – adam

+0

LIKE 'BS%' будет соответствовать любому количеству символов после BS. LIKE 'BS_' будет соответствовать только любому * одиночному символу после BS. –

1

Вы не сказали, что СУБД вы используете. Следующее будет работать в Oracle, и что-то, как они в большинстве других СУБД

1), где sales_rep как '%' BS

2), где зиЬзЬг (sales_rep, 1,2) = 'BS'

11

в некоторых базах данных вы можете сделать

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 вещь.

+0

+1 для решения всего вопроса. –

1

Надеюсь, что у вас никогда не будет двух торговых представителей, у которых, похоже, есть те же инициалы.

Кроме того, сортировка и фильтрация - это две совершенно разные вещи. Вы говорите о сортировке в заголовке вопроса и первом абзаце, но ваш вопрос касается фильтрации. Поскольку вы можете просто ЗАКАЗАТЬ на поле, и в любом случае он будет использовать первые два символа, я дам вам ответ на часть фильтрации.

Вы не говоря уже о вашем 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 он может быть недостаточно умен, чтобы понять, что он может использовать индекс на последнем.

+0

SUBSTRING() - стандартная функция SQL, LEFT() - нет. Но либо даст вам тот же результат. – Suncat2000

Смежные вопросы