Как отсортировать столбец varchar (SQL), содержащий цифры, символы, символы? - PullRequest
3 голосов
/ 12 февраля 2009

«Order by» возвращает этот результат ниже

05
05/1-1
05/1-2
05/1-3
05/1-4
05/1-5
05/1-6
05/1-7
05/1
05/2-1
05/2-2
05/2-3
05/2-4
05/2
05/3
05/4

и этот порядок ниже в порядке

05
05/1
05/1-1
05/1-2
05/1-3
05/1-4
05/1-5
05/1-6
05/1-7
05/2
05/2-1
05/2-2
05/2-3
05/2-4
05/3
05/4

Есть ли способ сделать это?

Ответы [ 4 ]

1 голос
/ 12 февраля 2009

Вам необходимо преобразовать / преобразовать данные varchar в числовой тип данных, а затем выполнить сортировку данных по порядку.

Скорее всего, вам также придется разделить строку данных, поэтому пример порядка по caluse может быть:

order by 
convert(int,left(columnName,2)) asc, 
convert(int,subtring(columnName,4`,2)) 

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

Имеет смысл?

1 голос
/ 12 февраля 2009

Если возможно, попытайтесь разделить данные, чтобы любая числовая информация находилась в своем собственном поле. Строковые данные и числовые данные вместе в поле всегда приводят к строковому типу данных, так что 'A2'> 'A11'.

0 голосов
/ 13 февраля 2009

На вашем месте я бы сделал хитрое выражение. Давайте предположим, что перед слешем у вас есть максимум 2 или 3 цифры. Если вы напишите:

order by case charindex('/', val)
           when 0 then convert(int, val)
           else convert(int, substr(val, 1, charindex('/', val) -1)
         end * 1000
           + case charindex('/', val)
               when 0 then 0
               else convert(float, replace(substring(val, 1 + charindex('/', val),
                                                     length(val)), '-', '.'))
             end

Если я ничего не набрал, следующее должно конвертировать 05 в 5000, 05/1 в 5001, 05 / 1-1 в 5001.1, и все должно сортироваться так, как вы хотите, при условии, что у вас всегда есть одна цифра в большинство после дефиса. В противном случае вы, вероятно, можете обойти это, разделив и добавив левое отступление с подходящим количеством нулей, но выражение станет намного более уродливым ...

0 голосов
/ 12 февраля 2009

Измените таблицу и добавьте столбец сравнения. Напишите небольшую программу, которая читает строки и конвертирует их в формат, который может преобразовать база данных. Думаю, в вашем случае ДАТА - хороший кандидат.

В общем случае используйте столбец VARCHAR и отформатируйте все числа в пять (или более) цифр (с ведущими нулями / пробелами, т.е. выровненными по правому краю).

После этого вы можете использовать столбец сравнения для упорядочения данных.

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