Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];

Вниз

сортировка по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.004 c
2-1222791159
электрослесарь
2008-09-30 20:12
2008.11.09
Неправильное удаление записи в БД


3-1209041604
Uno-84
2008-04-24 16:53
2008.11.09
Left join по двум параметрам


2-1222865303
White
2008-10-01 16:48
2008.11.09
Создание копии базы данных


15-1221220415
Правильный$Вася
2008-09-12 15:53
2008.11.09
пластиковая пулеметная лента во время 2 мировой


2-1222712909
serjo
2008-09-29 22:28
2008.11.09
Сворачивающаяся панель





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский