|
29.09.2010, 15:28 | #1 |
Участник
|
Сортировка по "дате" (поле строковое)
Доброго времени суток!
В поле таблицы (строковое) пришлось записывать еще и дату (углубляться в подробности не буду - сам знаю что не правильно .... но пришлось). Нужно сделать отчет с сортировкой по этому полю. Нужно что то типа: select table order by str2date(val..) desc ... Как нибудь можно такой селект реализовать? Есть мысль во временную табу скинуть (с переводом строки в дату), но не хотелось бы Заранее спасибо! |
|
29.09.2010, 15:35 | #2 |
Участник
|
Можно дату хранить в формате odbc типа ГГГГ-ММ-ДД:ЧЧ:ММ:СС
Тогда можно просто строку сортировать и не мучаться. |
|
29.09.2010, 15:53 | #3 |
северный Будда
|
Цитата:
По-хорошему - надо добавить в таблицу поле с датой, проапдейтить это поле нужными датами (ну и initValue дописать, если надо), а потом сортировать отчёт уже по этому новому полю. По-плохому - насколько я помню, в мапе идёт автоматическая сортировка по возрастанию, если ключом является число. Тогда можно сделать так - возьмите какую-нибудь ОЧЕНЬ далёкую дату (например, 01/01/2059); заполните мап значениями таблицы, используя в качестве ключа расстояние между далёкой датой и датой из строки (при этом они отсортируются по убыванию дат); затем выводите мап в отчёт, пересчитывая ключ обратно в дату. upd. В принципе, в качестве далёкой даты можно и текущую использовать. Но я не знаю, как себя поведёт мап, если в таблице окажутся даты больше текущей
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 29.09.2010 в 15:59. |
|
|
За это сообщение автора поблагодарили: lev (2). |
29.09.2010, 15:59 | #4 |
MCP
|
а если создать дополнительный столбец, с типом "дата" и в начале построения отчета заполнять его, обрезая при этом строку с датой по последним 10-ти символам? Таблица большая? А в функционале добавить заполнение этого поля, и при запуске отчета заполнять только для тех строк (исторических), у которых дата = datenull()?
|
|
29.09.2010, 16:02 | #5 |
Участник
|
ИМХО, все же в данной ситуации лучше прибегнуть к использованию временной таблицы.
__________________
С уважением, Александр. |
|
29.09.2010, 16:07 | #6 |
MCP
|
samolalex, по идее с одной стороны вы правы, я бы тоже так подумал. С другой стороны придется каждый раз строить целую таблицу (причем из-за одного поля, и записей может быть о-о-о-о-о-о-о-очень много), быстродействие точно будет хуже.
|
|
29.09.2010, 16:09 | #7 |
Ищущий знания...
|
Цитата:
мне кажется лучше так и сделать, и не надо мутить никаких промежуточных преобразований. так и код в будущем поддерживать будет проще, и в ваше строковое поле может добавиться ещё что-то, тогда придется все опять переделывать... и проблемы могут начать нарастать как снежный ком!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: kornix (1). |
29.09.2010, 16:30 | #8 |
Участник
|
В данном столбце (кпп/дата выдачи) хранится либо кпп либо дата (в зависимости от реквизита).
То есть, допустим, для "лицензии" клиента - дата выдачи, а для "Адреса поставки" - кпп. Походу придется столбец дополнительный добавлять) а как не хотелось... думал есть ч нить подходящее) |
|
29.09.2010, 16:36 | #9 |
Участник
|
Цитата:
Сообщение от lev
хороший совет!
мне кажется лучше так и сделать, и не надо мутить никаких промежуточных преобразований. так и код в будущем поддерживать будет проще, и в ваше строковое поле может добавиться ещё что-то, тогда придется все опять переделывать... и проблемы могут начать нарастать как снежный ком! |
|
29.09.2010, 16:25 | #10 |
Участник
|
Цитата:
Сообщение от pitersky
Как я понял, в данной строке не только дата, и эта дата не вначале строки. Так что не прокатит.
По-хорошему - надо добавить в таблицу поле с датой, проапдейтить это поле нужными датами (ну и initValue дописать, если надо), а потом сортировать отчёт уже по этому новому полю. По-плохому - насколько я помню, в мапе идёт автоматическая сортировка по возрастанию, если ключом является число. Тогда можно сделать так - возьмите какую-нибудь ОЧЕНЬ далёкую дату (например, 01/01/2059); заполните мап значениями таблицы, используя в качестве ключа расстояние между далёкой датой и датой из строки (при этом они отсортируются по убыванию дат); затем выводите мап в отчёт, пересчитывая ключ обратно в дату. upd. В принципе, в качестве далёкой даты можно и текущую использовать. Но я не знаю, как себя поведёт мап, если в таблице окажутся даты больше текущей |
|
29.09.2010, 16:38 | #11 |
северный Будда
|
Цитата:
Сообщение от Logger
Не уверен что 2059 дата обработается. Кажется было ограничение на 2053 год. На сортировку в мапе нехорошо закладываться. я не проверял но не исключено что он числа отсортирует как числа а не как строки. Лучше уж времянка или дополнительное поле. Плюс где то в дебрях ax32.exe видел ссылку на ключ командной строки, смысл которого сводился к тому что сортировка в мапах будет обратная - по убыванию ключа. Зачем это могло понадобиться - ума не приложу но по-любому понятно что некомильфо закладываться на сортировку по возрастанию ключа в мапе.
2) Так я и предлагал сортировать числа как числа Именно это и нужно, если взять плохой вариант. При всём том это именно плохой вариант - отдельное поле со всех сторон лучше 3) Закладываться на сортировку вполне комильфо. Вряд ли (если оный параметр существует) Аксу можно с ним запустить случайно. А неслучайно никто запускать и не станет.
__________________
С уважением, Вячеслав |
|
29.09.2010, 17:54 | #12 |
Участник
|
|
|
29.09.2010, 17:20 | #13 |
Участник
|
|
|
29.09.2010, 17:54 | #14 |
Участник
|
|
|
29.09.2010, 16:24 | #15 |
Участник
|
такой вариант мне не подходит (юзвери уже привыкли к формату дд мм гг)... Нет больше вариантов?
За ответ спасибо! |
|
|
|