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

Вниз

сортировка символьного поля как целочисленное   Найти похожие ветки 

 
Ganda ©   (2008-01-04 10:47) [0]

проблема заключается в следующием, поле имеет тип символьный, туда по идеи должны записыватся числа, но бывает проскальзывают и символы!
из за этого неполучается нормально отсортировать поле!
Хотелось что бы в начале были списка были символы а потом шли нормальная нумерация!


 
Sergey13 ©   (2008-01-04 11:17) [1]

Ну так как сделал - так и работает.
Для "правильной" сортировки строки как числа, строки должны иметь одинаковое число символов, т.е. быть дополнеными слева одинаковым символом (например "0"). Символы которые у тебя "проскальзывают" оказывают естественное влияние на сортировку. Хочешь нормальной сортировки - переделывай структуру таблицы на нормальную, т.е. используй правильные типы для полей.


 
Ganda ©   (2008-01-04 12:00) [2]

структура базы создавалась очень давно и переделывать её боюсь слишком много будет криков


 
Sergey13 ©   (2008-01-04 12:05) [3]

> [2] Ganda ©   (04.01.08 12:00)

Ну попробуй добавить отдельное "сортировочное" поле и заполнять его тригером (возможно с вызовом UDF) по указанной ранее схеме.


 
ganda ©   (2008-01-04 12:11) [4]

ок спаисобо


 
palva ©   (2008-01-04 12:15) [5]

Можно написать числовую UDF-функцию от поля, которая возвращает -1, если поле нечисловое, и само поле, если поле числовое. А в запросе написать
ORDER BY Fun(Field1)
Единственное, что непонятно, это как можно подключить использование индекса. Не знаю, бывают ли в FB вычисляемые поля.


 
sniknik ©   (2008-01-04 12:35) [6]

> которая возвращает -1, если поле нечисловое ...
> ... в запросе написать
> ORDER BY Fun(Field1)
тогда сортировка символов в начале "пойдет нафиг"...

конечно если она и не нужна то все ok, нужна, тогда придется разбивать поле на 2 символы и числа, и сортировать по двум полям (в символы там где число "состоялось" писать последнюю букву "Я").
или приводить числа к строке в определенном формате, с фиксированной длинной, вроде
а //символ
с //символ
Я0000000001 //число
Я0000099999 //число
тогда можно обойтись и одним полем по которому сортировать.
кстати если там у тебя не символы, а строки, то формировать строку из числа нужно быдет так ЯЯЯЯЯЯ99999...  догадайся почему.
и естествено это поле только для сортировки, показывать нужно оригинальное.


 
VadimSpb   (2008-01-04 13:05) [7]


> Sergey13 ©   (04.01.08 11:17) [1]

Бредовая идея не понравится юзерам.
Вопрос автора абсолютно законен. Какой применить тип поля кроме символьного если есть номера домов и квартир с буквами? Например: 10A.
В общем ситуация типовая и странно, что нет известных типовых решений.
Решил это ХП, вот часть кода:
 
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add("SELECT Name FROM sysobjects WHERE Name=""Sorted""");
  ADOQuery.Close;ADOQuery.Open;
  if ADOQuery.Fields[0].AsString="" then
    begin
      ADOCommand.CommandText :=
      "CREATE FUNCTION Sorted(@FlatNumber varchar(32)) " +
      "RETURNS varchar(32) " +
      "AS " +
      "BEGIN " +
        "declare @Result varchar(32) " +
        "declare @ind int " +
        "if @FlatNumber is not null " +
          "begin " +
            "set @ind = PATINDEX(""%[^0-9]%"", @FlatNumber) " +
            "if @ind = 0 " +
            "set @ind = LEN(@FlatNumber) + 1 " +
            "set @Result = REPLICATE("" "", 10 - @ind) + @FlatNumber " +
          "end " +
         "RETURN @Result " +
      "END ";
      ADOCommand.Execute;
    end;


 
Sergey13 ©   (2008-01-04 13:08) [8]

> [7] VadimSpb   (04.01.08 13:05)
> Бредовая идея не понравится юзерам.

А при чем тут юзеры? Ты посвящаешь своих в тонкости реализации? Сочувствую.


 
VadimSpb   (2008-01-04 13:16) [9]

Глупости, разумеется не посвящаю. Смотреть на нули они конечно будут, даже заполненные без их участия, но при этом возникает сакраментальный вопрос о профессионализме автора ;-))), который иначе не может сделать сортировку.


 
Sergey13 ©   (2008-01-04 13:19) [10]

> [9] VadimSpb   (04.01.08 13:16)
> Смотреть на нули они конечно будут, даже заполненные без
> их участия, но при этом возникает сакраментальный вопрос
> о профессионализме автора ;-))), который иначе не может
> сделать сортировку.

А у меня вот возникает сакраментальный вопрос о профессионализме автора этого утверждения, который не знает, что сортировать и показывать можно РАЗНЫЕ поля.


 
VadimSpb   (2008-01-04 13:22) [11]

Зачем? Впрочем, кому как удобнее.


 
Sergey13 ©   (2008-01-04 13:32) [12]

> [11] VadimSpb   (04.01.08 13:22)
> Зачем?

Например в моем варианте код вычисления поля будет выполняться 1 раз при вставке + число возможных модификаций поля. В твоем варианте код будет выполняться по числу запросов. Ну и что лучше?

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


 
VadimSpb   (2008-01-04 13:39) [13]

В глупости я тебя не обвинял, не обижайся, и в мыслях не было.
Вариант с ХП мне кажется значительно удобнее:
1. Не усложняется код и его чтение вторым полем.
2. ХП вызывается только при необходимости сортировки по данному полю. Работает очень быстро.


 
Andrey ©   (2008-01-04 14:02) [14]

>VadimSpb   (04.01.08 13:39) [13]
Вот так последователи технологий микрософта приближают тепловую смерть вселенной... учитесь, товарищи )

10A - да, ситуация типовая, решается разнесением числовой составляющей и символьной по разным полям. Изначально решается. На этапе проэктирования при включении в таблицу такой сущности, как адрес дома.


 
VadimSpb   (2008-01-04 14:30) [15]


> Andrey ©   (04.01.08 14:02) [14]

См. [13].
Также есть варианты непрогнозируемого смешения букв и цифр.


 
Andrey ©   (2008-01-04 14:37) [16]

>VadimSpb   (04.01.08 14:30) [15]
Посмотрел. "непрогнозируемого смешения букв и цифр" - "бардак систематизировать нельзя".


 
Johnmen ©   (2008-01-04 14:40) [17]

Символьные поля должны сортироваться как символьные. Числовые, как числовые.
Вот и вся недолга.
Если какому-то извращенцу надо что-то своё, то пусть и выдумает свои правила, и применит их... Проблем-то нет...


 
VadimSpb   (2008-01-04 14:41) [18]


> "бардак систематизировать нельзя".

Эмоции.

> "непрогнозируемого смешения букв и цифр"

Мой вариант это решает.


 
VadimSpb   (2008-01-04 14:43) [19]


> Символьные поля должны сортироваться как символьные. Числовые,
>  как числовые.

В каком Уставе это написано? Похоже на приемы военного программирования :-))
Жизнь многогранна ...


 
Johnmen ©   (2008-01-04 14:49) [20]

Ты из контекста не дергай, ты до конца дочитывай.


 
VadimSpb   (2008-01-04 14:56) [21]


> Если какому-то извращенцу надо что-то своё, то пусть и выдумает
> свои правила, и применит их... Проблем-то нет...

Можно почесать правой ногой левое ухо. Мне неудобно и быстрее рукой, и в любом месте. Так и мое решение с ХП. Пока не вижу ни одного аргумента в этой переписке чем лучше второе поле. Изначально именно так и работал ранее. Потом пришел к выводу что ХП просто удобнее, для всех вариантов (дом, кв-ра, тлф с кодом и прочее).


 
Johnmen ©   (2008-01-04 15:01) [22]


> VadimSpb   (04.01.08 14:56) [21]

Да не стОит так переживать - у тебя самое гениальное решение. Это все уже поняли и согласны.

ЗЫ
Ему про Фому, а он про Ерему.


 
VadimSpb   (2008-01-04 15:03) [23]

Ага :-)))
То сейчас тебе хотел написать!!!!
С НОВЫМ ГОДОМ!!!


 
Andrey ©   (2008-01-04 15:26) [24]

>VadimSpb   (04.01.08 14:41) [18]
>Эмоции.
Да, вы меня улыбаете. За что вам отдельное спасибо.
С Новым Годом )


 
Iskander ©   (2008-01-04 16:47) [25]

А чё, в фаэрбёрде нельзя индекс построить по вычисляемому значению? зачем дополнительные поля таблице создавать?


 
palva ©   (2008-01-04 23:37) [26]

А чё, разве можно? Я лично даже не пробовал, раз в книжках пишут, что нельзя. Но если у вас на FB 1.5 получилось, то научите, как.


 
Виталий Панасенко(дом)   (2008-01-05 09:11) [27]

в 2-ке можно



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

Форум: "Базы";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.063 c
15-1208894835
Jolik
2008-04-23 00:07
2008.06.08
Подскажите профайлер для Delphi 2007 for Win32


2-1210777209
Jeqa
2008-05-14 19:00
2008.06.08
автоподстановка (автопоиск)


15-1209541192
ПЛОВ
2008-04-30 11:39
2008.06.08
Разборка с NumLock


2-1210595612
VitalZ
2008-05-12 16:33
2008.06.08
Как выделить значения параметров


15-1208787695
Palladin
2008-04-21 18:21
2008.06.08
HDD





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский