2016-09-24 2 views
3

У меня есть эти CB1-15 значения, однако я хочу заказать их ... CB1-15, но в настоящее время он идет CB1, CB10, CB11 и т.д.заказа на основе числового значения в строку из SQL

Это как моя таблица выглядит ...

CB Description File Path 

CB1 New Product new.png 
CB10    
CB11    
CB12    
CB13    
CB14    
CB15    
CB2 Best Seller best.png 
CB3   
CB4   
CB5   
CB6   
CB7   
CB8   
CB9   

Спасибо за помощь :)

+1

Просто так я ясно. является ли образец данных одним столбцом или несколькими? –

+0

@JohnCappelletti ответил (а), но если кто-то ищет его позже, iv'e обновил сообщение, чтобы показать его столбцы – Adam91Holt

ответ

6

Используйте приведенный ниже сценарий.

SELECT * 
    FROM YourTable 
    ORDER BY CAST(Replace(YourColumn,'CB','')as INT) 
+0

Спасибо :) Большое спасибо! – Adam91Holt

+1

Он работает лучше даже для CB100 так +1 :) – Susang

2

это немного неясно, что данные в нескольких столбцах или одной строки. Вот один метод, который должен работать в обоих случаях:

select * 
from yourtable 
order by cast((substring(yourfield, 3, 2)) as int) 

Ключ используется для castorder byint вместо строки.

+0

Спасибо, что так много сэр :) – Adam91Holt

+0

Это не работает для CB100, поэтому вам нужно использовать длину значения вместо 2, заменив CB. Поэтому я бы сказал, что решение @ Unnik работает лучше. – Susang

0

Другой простой способ сделать сделать заказ:

order by len(col), col 

И если вы хотите по убыванию:

order by len(col) desc, col desc