Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
raycom
- Сообщения: 5
- Зарегистрирован: 08 фев 2006, 18:19
Сообщение
raycom » 08 фев 2006, 18:28
Нужно отсортировать так, что бы получилось
1
2
3а
3б
11
21
а не
1
11
2
21
3а
3б
Может кто чего-нибудь посоветует?
-
smu
- Сообщения: 39
- Зарегистрирован: 29 окт 2005, 10:12
Сообщение
smu » 08 фев 2006, 19:14
raycom писал(а):Нужно отсортировать так, что бы получилось
...
3а
3б
...
3б - таких чисел не бывает, сколько в ВУЗе не учил математику

-не встречал. Разве какая-то хитрая система .. FF
Самый простой способ
1. Создаете дополнительный столбец тип double precision
2. Используете умный update к новому столбцу
3 -> 3.0
3a -> 3.01
3б -> 3.02
11 -> 11.0
3. Выводите старый столбец, сортируете по новому.
P.S. Update потребует использование UDF, кажется ...
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 08 фев 2006, 19:36
число в строке - это строка, а не число. Соответственно, содержимое строк подчиняется правилам сортировки строк. Если надо сортировать числа в строке - добавляйте ведущие нули, а при показе - убирайте их.
-
Ivan_Pisarevsky
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Сообщение
Ivan_Pisarevsky » 09 фев 2006, 10:18
Я своим операторам в приказном порядке велел вводить такие числа в виде
0001
0002
0003а
0003б
0021
и тд... вобщем административными методами.

-
raycom
- Сообщения: 5
- Зарегистрирован: 08 фев 2006, 18:19
Сообщение
raycom » 09 фев 2006, 18:08
Мне предложили 3 варианта:
1. создать столбец с избыточной информацией
2. хватать за горло юзеров
3. програмным методом добавлять нули, которые никак не скроеш,скажем, в DBGrid, и наличие которых в начале строки будут раздражать око юзера.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 09 фев 2006, 18:35
которые никак не скроеш,скажем, в DBGrid
все можно скрыть. у столбца (TField) есть getText/setText, к примеру.
-
dimitr
- Разработчик Firebird
- Сообщения: 888
- Зарегистрирован: 26 окт 2004, 16:20
Сообщение
dimitr » 10 фев 2006, 09:24
ORDER BY RPAD(<field>, 10, ' ')
-
smu
- Сообщения: 39
- Зарегистрирован: 29 окт 2005, 10:12
Сообщение
smu » 12 фев 2006, 18:50
dimitr писал(а):ORDER BY RPAD(<field>, 10, ' ')
Так вроде бы получим следующее
'1000______'
'11________'
'3_________'
'3a________'
'9_________'
где '_' - пробел
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 фев 2006, 01:21
ну LPAD, а не RPAD. Это вроде бы тебе надо, а не другим. Так?

-
dimitr
- Разработчик Firebird
- Сообщения: 888
- Зарегистрирован: 26 окт 2004, 16:20
Сообщение
dimitr » 13 фев 2006, 15:27
да, шо-то у меня право с лево перепутались

-
smu
- Сообщения: 39
- Зарегистрирован: 29 окт 2005, 10:12
Сообщение
smu » 13 фев 2006, 15:47
kdv писал(а):ну LPAD, а не RPAD. Это вроде бы тебе надо, а не другим. Так?

К сожалению, чужие проблемы решать легче, чем свои.

Боюсь показаться занудой, но и LPAD тоже не даст нужный результат.
'________30'
'________31'
'________3a'
Буквы создают проблемы. А так идея неплохая, пусть автор топика сам дальше копает.
-
raycom
- Сообщения: 5
- Зарегистрирован: 08 фев 2006, 18:19
Сообщение
raycom » 14 фев 2006, 16:27
kdv писал(а):которые никак не скроеш,скажем, в DBGrid
все можно скрыть. у столбца (TField) есть getText/setText, к примеру.
Спасибо, сработало прекрасно.
А с LPAD и RPAD ничего не выходит. Видимо это какие-то внешние функции? Если это так, то как их подключить к IB 7.0?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 14 фев 2006, 16:48