Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

сортировка по varchar   Найти похожие ветки 

 
zorik ©   (2008-04-18 12:20) [0]

есть поле name типа varchar с данными: 1, 2, 10, 1-р, 21, 3-е, ...
нужно "правильно" отсортировать данные по этому полю, тоесть:
1, 1-р, 2, 3-е, 10, 21, ...
order by name<code/> возвращает: 1, 10, 1-р, 2, 21, 3-е, ...
раньше я обходил эту проблему с использованием UDF - создавал допольнительное поле SORTNAME COMPUTED BY (mysort(name))<code/>, где функция mysort возвращала преобразованое поле, например
1-р -> 0001-р,
10 -> 0010,
...

какие будут решения, чтоб не использовать UDF?


 
Ega23 ©   (2008-04-18 12:31) [1]

Я обычно практически в любой таблице, где нужна сортировка, добавляю integer-поле Ord, в котором либо пользователь сам может нужный порядок проставить (чем меньше значение, тем "выше" запись будет во всех выборках), либо я сам могу этим делом управлять.

Правда не знаю, насколько в твоей ситуации этот вариант поможет...


 
zorik ©   (2008-04-18 12:33) [2]

а нету в Firebird функций разделения строк. Можно бы было разделить тогда на числовую и текстовую часть?


 
zorik ©   (2008-04-18 12:38) [3]

Появилась идея!
В базе хранить 2 значения: номер (числовое) и приставку(текстовую). Логику реализовать на клиенте. Когда пользователь вводит или редактирует значение - разделять стринг на две части (левая числовая, а правая - текст) и записывать в базу 2 поля

Как только начал просить помощи, сразу идеи полезли )))


 
Anatoly Podgoretsky ©   (2008-04-18 12:46) [4]


> а нету в Firebird функций разделения строк.

Что и этого нет?


 
Anatoly Podgoretsky ©   (2008-04-18 12:48) [5]

Ну и что ты будешь делать, если будет Ф1Б, правильный совет тебе дали в [1], где отсутствуют коллизии подобного и прочих родов.


 
Johnmen ©   (2008-04-18 13:15) [6]


> Anatoly Podgoretsky ©   (18.04.08 12:46) [4]
> > а нету в Firebird функций разделения строк.Что и этого
> нет?

Есть :)
не всё так плохо для любителей затыкать горой кода огрехи проектирования...


 
Anatoly Podgoretsky ©   (2008-04-18 13:28) [7]

> Johnmen  (18.04.2008 13:15:06)  [6]

В следудующий раз получит от пользователей
Вчера было 1-а/1-р, а сегодня 1-р/1-а


 
Johnmen ©   (2008-04-18 13:40) [8]


> Anatoly Podgoretsky ©   (18.04.08 13:28) [7]

Я и говорю, что на проектирование своё надо смотреть :))
А уж потом на функции...


 
zorik ©   (2008-04-18 14:16) [9]

1. такого по ТЗ не может быть "Ф1Б"
2. я это огрехом проэктирования не считаю, так как это есть просто номер какого-то объекта. На 100 объектов 95 будут чисто номерные, а 5 номер + приставка

всем спасибо


 
Anatoly Podgoretsky ©   (2008-04-18 14:36) [10]

> Johnmen  (18.04.2008 13:40:08)  [8]

Но видишь ему до лампочки, что мы говорим.


 
zorik ©   (2008-04-18 14:55) [11]


> Anatoly Podgoretsky ©   (18.04.08 14:36) [10]

Ну хорошо.
Ваше решение. Как бы вы это решили. Это поле номер скважины. Сначала было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. Сделал поле типа varchar.
Для различных подразделений и т.д. у меня есть поле с кодом (не путать с первичным ключем), которое вносится вручную и по нему идет сортировка.

Здесь дело не сколько во мне, а в системе стандартов. Но ее никто не будет менять, написана лет 60 назад. Нужно адаптировать все к современным требованиям. Мы работаем со старыми документами. Бывает что в таблице в одной ячейке ручкой записано 2 значения через слеш. И как тут поступить? Переделываешь тогда структуру или записываешь в базу что-то среднее

так что, зря вы меня пинаете...


 
Johnmen ©   (2008-04-18 14:58) [12]


> zorik ©   (18.04.08 14:55) [11]

Я бы решил вот так [3] с той разницей, что в одном поле, как есть, а в другом - числовое представление того, что в первом.
Об этом и Ega23 ©   (18.04.08 12:31) [1] сказал.


 
zorik ©   (2008-04-18 15:07) [13]

так и решаем, а кто будет "неправильное" название вводить будем бить по шапке )))


 
Anatoly Podgoretsky ©   (2008-04-18 15:16) [14]

> Johnmen  (18.04.2008 14:58:12)  [12]

Я бы сделал единственную модификацию, во втором поле умноженое на 10 и при конфликте запрашивать пользователя указать правильный порядок.
Только вот это было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. ему уде сказали, что может появится и не Число-литера, что угодно новое, ну не верит он в законы Мерфи и Паркинсона, как не верил в первом случае. Второе поле позволит сгладить некоторые моменты, отсрочит их на некоторе время, пока не начнут бить, надо же подготовиться к побегу.


 
Anatoly Podgoretsky ©   (2008-04-18 15:18) [15]

> Johnmen  (18.04.2008 14:58:12)  [12]

Я бы сделал единственную модификацию, во втором поле умноженое на 10 и при конфликте запрашивать пользователя указать правильный порядок.
Только вот это было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. ему уде сказали, что может появится и не Число-литера, что угодно новое, ну не верит он в законы Мерфи и Паркинсона, как не верил в первом случае. Второе поле позволит сгладить некоторые моменты, отсрочит их на некоторе время, пока не начнут бить, надо же подготовиться к побегу.


 
Johnmen ©   (2008-04-18 15:29) [16]


> Anatoly Podgoretsky ©   (18.04.08 15:16) [14]

Так я же предусмотрительно умолчал о том, как формируется числовое представление :)
А оно может формироваться безотносительно типа исходного поля.


 
Anatoly Podgoretsky ©   (2008-04-18 15:40) [17]

> Johnmen  (18.04.2008 15:29:16)  [16]

Естественно пользователь может назначить свое значение как при вводе, так и в последующем.
Эта "проблема" стара как мир и давно решена методом обхода, а не решением по существу, эта же проблема существует только в мозгах.


 
zorik ©   (2008-04-18 15:50) [18]


эта же проблема существует только в мозгах

ладно, спасибо вам! "хорошего" же вы (
мнения обо мне )))


 
Johnmen ©   (2008-04-18 15:56) [19]

В данном [17] контексте слово "мозги" носит собирательный характер... :)


 
Anatoly Podgoretsky ©   (2008-04-18 16:06) [20]

> zorik  (18.04.2008 15:50:18)  [18]

Не о тебе, а о "автоматизаторах", делом должен заниматься специалист, а то как обычно.


 
Anatoly Podgoretsky ©   (2008-04-18 16:45) [21]

> Johnmen  (18.04.2008 15:56:19)  [19]

Любят некоторые все принимать на свой счет :-)
Не знаю даже почему, какие причины.


 
Ganda   (2008-04-25 13:18) [22]

у меня такая же проблема была, я её решил через UDF
и тебе того же советую так же


 
VadimSpb   (2008-04-26 20:14) [23]


> Не о тебе, а о "автоматизаторах", делом должен заниматься
> специалист, а то как обычно.

Это для инвестора? :-)))



Страницы: 1 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.008 c
2-1222923008
Armond
2008-10-02 08:50
2008.11.09
Работа с датами


2-1222780763
S-Type
2008-09-30 17:19
2008.11.09
Переместиться на запись


2-1222879419
lamer6666
2008-10-01 20:43
2008.11.09
Как на время выполнения SQL запроса Query изменить вид курсора


15-1221225864
Scritniy
2008-09-12 17:24
2008.11.09
Версии Delphi


2-1222684547
zdm
2008-09-29 14:35
2008.11.09
Перевод Ф.И.О. в верхний регистр