Сортировка SQL по первым двум символам полей - PullRequest
4 голосов
/ 11 ноября 2009

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

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

Ответы [ 5 ]

12 голосов
/ 11 ноября 2009

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

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

3 голосов
/ 11 ноября 2009

Как насчет этого

SELECT * FROM SalesTable WHERE SalesRepField LIKE 'BS_'
1 голос
/ 11 ноября 2009

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

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

Вы не упоминаете свою СУБД, но это будет работать в любом продукте:

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

1 голос
/ 11 ноября 2009

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

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

2) где substr (sales_rep, 1,2) = 'BS'

0 голосов
/ 11 ноября 2009
SELECT * FROM SalesRep
WHERE SUBSTRING(SalesRepID, 1, 2) = 'BS'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...