2014-09-04 4 views
0

Мне нужно отсортировать поле на всем после пробела usig SQL. В приведенном ниже примере я хотел бы сортировать (восходящий), начинающийся с фамилии.Сортировка всего после определенного символа в SQL

USA-J. Doe
USA-M. Мышь
USA-A. Мышь
USA-D. Duck
USA-P. Panther
USA-T. Bird

Мне нужно, чтобы отсортировать всю строку, но от фамилии. Если есть два последних имени, которые идентичны, я бы хотел, чтобы он учитывал начальное имя первого имени. Результатом будет следующее:

USA-T. Птица
USA-J. Doe
USA-D. Duck
USA-A. Мышь
USA-M. Мышь
USA-P. Panther

Мне нужно будет использовать этот код как в SQL Server, так и в MS Access.

Я надеюсь, что кто-то может полностью ответить на этот вопрос. По какой-то причине кто-то забил мне -1 по этому вопросу. Я не могу понять, почему. Я был настолько конкретным, насколько мне известно, и я не смог найти ответ на последний фрагмент - сортировка по первой букве, если фамилия такая же.

Спасибо, ребята, за ответ. Информация помогла. Мне пришлось добавить скобки вокруг «name», потому что имя поля было похоже на имя фактической таблицы.

+0

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

+0

Это не похоже на то, что он принимает во внимание первое имя (представленное первой буквой имени). В этом примере есть A. Mouse и M. Mouse. Я ошибаюсь? – Beckie

+0

Мне нужно будет использовать этот код как в SQL Server, так и в MS Access. – Beckie

ответ

2

Это зависит от базы данных. Ниже приведен пример того, как вы можете это сделать в SQL Server:

order by substring(name, charindex(' ', name) + 1, len(name))) 

Аналогичная логика работает в других базах данных, но функции разные.

Например, в Oracle:

order by substr(name, instr(name, ' ') + 1) 

И, в MySQL, вы могли бы использовать подобную логику, но это проще:

order by substring_index(name, ' ', -1) 

И в MS Access:

order by mid(name, instr(name, ' ') + 1) 
0

Для сортировки по lasname, firstname, которое необходимо использовать на сервере SQL:

order by substring(name, charindex(' ', name) + 1, len(name))), substring(name, charindex('-', name) + 1, 1)) 

В Access

order by mid(name, instr(name, ' ') + 1), order by mid(name, instr(name, '-') + 1, 1) 
Смежные вопросы