2013-12-12 3 views
6

Это результат моего запроса, но он не упорядочен правильно. Я хочу заказать последние 2 символа. Результат должен быть: Fa0/10 ниже Fa0/9.Закажите последние 2 символа string sql

Fa0/1 
Fa0/10 
Fa0/11 
Fa0/12 
Fa0/2 
Fa0/3 
Fa0/4 
Fa0/5 
Fa0/6 
Fa0/7 
Fa0/8 
Fa0/9 
Gi0/1 
Gi0/2 
Null0 
Vlan1 

Мой запрос:

SELECT inft.port FROM interfaces AS intf ORDER BY RIGHT(intf.port + 0, 2) 

второй редактирование: sqlfiddle

+0

вы должны получить номер и порядок о строке и номер отдельно –

+1

Сообщите нам, что СУБД вы используете и какие возможности для значений, которые не отсортированных правильно. –

+0

sql server, mysql, oracle? – sumit

ответ

7

Попробуйте это:

SELECT port 
FROM interfaces 
ORDER BY SUBSTRING_INDEX(port, '/', 1), CAST(SUBSTRING_INDEX(port, '/', -1) AS SIGNED) 

Проверьте SQL FIDDLE DEMO

OUTPUT

| PORT | 
|--------| 
| Fa0/1 | 
| Fa0/2 | 
| Fa0/3 | 
| Fa0/4 | 
| Fa0/5 | 
| Fa0/6 | 
| Fa0/7 | 
| Fa0/8 | 
| Fa0/9 | 
| Fa0/10 | 
| Fa0/11 | 
| Fa0/12 | 
| Gi0/1 | 
| Gi0/2 | 
| Null0 | 
| Vlan1 | 
+0

Это работает, спасибо вам большое! – 9edge

+0

С наилучшими пожеланиями –

+0

@SaharshShah: Это действительно решило мою проблему, но можете ли вы объяснить, что реализована логика? Пожалуйста? – saveATcode

1

Порядок правильно - лексически.

Вам необходимо конвертировать их в число.

0

ОБНОВЛЕНО

Вам нужно сделать + 0 после извлечения двух последних символов, чтобы преобразовать его в число

SELECT inft.port FROM interfaces AS intf ORDER BY SUBSTRING(intf.port, LOCATE('/', intf.port)+1, LENGTH(intf.port)) + 0 
+0

Это не будет работать, потому что косые черты попадают в строку RIGHT, когда значение меньше десяти. –

+0

Это не работает, он заказывает еще хуже – 9edge

+0

Да, это не сработает. Как упоминал Брэдли, сначала нужно подстроить на основе '/', а затем плюс 0, чтобы преобразовать его в число. – Saim

6

Почему вам нужно + 0 ?? Просто удалите его, и он будет работать.

SELECT port FROM interfaces ORDER BY RIGHT(port, 2) 

SQL Fiddle Demo

Выход:

PORT 
------------ 
Fa0/1 
Gi0/1 
Gi0/2 
Fa0/2 
Fa0/3 
Fa0/4 
Fa0/5 
Fa0/6 
Fa0/7 
Fa0/8 
Fa0/9 
Fa0/10 
Fa0/11 
Fa0/12 
Null0 
Vlan1 
+0

Я отредактировал свою скрипку. Как вы можете видеть вас с mysql, он заказывает разные. Спасибо за помощь. – 9edge

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