Страница 1 из 1

Сортировка чисел в varchar

Добавлено: 08 фев 2006, 18:28
raycom
Нужно отсортировать так, что бы получилось
1
2


11
21
а не
1
11
2
21


Может кто чего-нибудь посоветует?

Re: Сортировка чисел в varchar

Добавлено: 08 фев 2006, 19:14
smu
raycom писал(а):Нужно отсортировать так, что бы получилось
...


...
3б - таких чисел не бывает, сколько в ВУЗе не учил математику :D -не встречал. Разве какая-то хитрая система .. FF

Самый простой способ
1. Создаете дополнительный столбец тип double precision
2. Используете умный update к новому столбцу

3 -> 3.0
3a -> 3.01
3б -> 3.02
11 -> 11.0

3. Выводите старый столбец, сортируете по новому.

P.S. Update потребует использование UDF, кажется ...

Добавлено: 08 фев 2006, 19:36
kdv
число в строке - это строка, а не число. Соответственно, содержимое строк подчиняется правилам сортировки строк. Если надо сортировать числа в строке - добавляйте ведущие нули, а при показе - убирайте их.

Добавлено: 09 фев 2006, 10:18
Ivan_Pisarevsky
Я своим операторам в приказном порядке велел вводить такие числа в виде
0001
0002
0003а
0003б
0021
и тд... вобщем административными методами. :)

Добавлено: 09 фев 2006, 18:08
raycom
Мне предложили 3 варианта:
1. создать столбец с избыточной информацией
2. хватать за горло юзеров
3. програмным методом добавлять нули, которые никак не скроеш,скажем, в DBGrid, и наличие которых в начале строки будут раздражать око юзера.

Добавлено: 09 фев 2006, 18:35
kdv
которые никак не скроеш,скажем, в DBGrid
все можно скрыть. у столбца (TField) есть getText/setText, к примеру.

Добавлено: 10 фев 2006, 09:24
dimitr
ORDER BY RPAD(<field>, 10, ' ')

Добавлено: 12 фев 2006, 18:50
smu
dimitr писал(а):ORDER BY RPAD(<field>, 10, ' ')
Так вроде бы получим следующее

'1000______'
'11________'
'3_________'
'3a________'
'9_________'

где '_' - пробел

Добавлено: 13 фев 2006, 01:21
kdv
ну LPAD, а не RPAD. Это вроде бы тебе надо, а не другим. Так? :)

Добавлено: 13 фев 2006, 15:27
dimitr
да, шо-то у меня право с лево перепутались :-)

Добавлено: 13 фев 2006, 15:47
smu
kdv писал(а):ну LPAD, а не RPAD. Это вроде бы тебе надо, а не другим. Так? :)
К сожалению, чужие проблемы решать легче, чем свои. :) Боюсь показаться занудой, но и LPAD тоже не даст нужный результат.

'________30'
'________31'
'________3a'

Буквы создают проблемы. А так идея неплохая, пусть автор топика сам дальше копает.

Добавлено: 14 фев 2006, 16:27
raycom
kdv писал(а):
которые никак не скроеш,скажем, в DBGrid
все можно скрыть. у столбца (TField) есть getText/setText, к примеру.
Спасибо, сработало прекрасно.
А с LPAD и RPAD ничего не выходит. Видимо это какие-то внешние функции? Если это так, то как их подключить к IB 7.0?

Добавлено: 14 фев 2006, 16:48
kdv