Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизСортировка Найти похожие ветки
← →
Chel (2005-02-19 16:32) [0]Есть некая база необходимо отсортировать её по полю в котором содержатся числа, а внекоторых записях после числа может быть любой символ.
Пример:1;2;5;7;99;1А;4Б;4;4А;1а
нужно:1;1А;1а;2;3;4;4А;4Б;5;7;99
← →
Anatoly Podgoretsky © (2005-02-19 16:44) [1]MSSQL не поддерживает сортировки, жто возможно только для Парадокс и дБейс при работе через БДЕ, функция dbiTableSort/
Тебе нужна не сортировка, а упорядочивание выборки, не знаю возможно ли это сделать через хранимые процедуры. Но сама по себе задача странная и говорит о неверном дизайне базы. Может стоит добавить поле сортирки, состоящие из двух полей цифровой и символьной, конечно если ты указал правильный формат данных, а то окажется что у тебя еще и 1a2b
← →
Fin © (2005-02-19 17:09) [2]Chel (19.02.05 16:32) не давно пришлось решать похожую проблемму.
Я так понимаю поле по которому сортируешь номер дома или квартиры из адреса?
Короче к делу.
Как уже упомянул > Anatoly Podgoretsky © ,я использовал хранимую процедуру и в добавок функцию определяемую пользователем.
И так процедура следующего вида:
select твое_поле,dbo.SortT(твое_поле) as sortt
from твоя_таблица
order by sortt,твое_поле
Теперь пользовательская функция:
CREATE FUNCTION SortT (@text varchar(50))
RETURNS int
AS
BEGIN
declare @sort int
declare @len int
declare @stop bit
declare @first char(1)
set @text=ltrim(rtrim(@text))
set @first=substring(@text,1,1)
if isnumeric(@first)=1
begin
set @stop=0
if isnumeric(@text)=1
begin
set @sort=cast(@text as int)
end
else
begin
while @stop<>1
begin
set @len=len(@text)-1
set @text=substring(@text,1,@len)
if isnumeric(@text)=1
begin
set set @sort=cast(@text as int)
set @stop=1
end
else if @len<1 set @stop=1
end
end;
end
else set @sort=0
RETURN(@sort)
END
Всё.
И кое какие замечания по поводу того чтобы выводить сначала 1А и после 1а, то сервер берет это на себя, думать не надо, но если всё же преспичит то немного переделай функцию что бы на выходе было не целое число, а вещественное, и соответсвенно в дробной части определяешь порядок по сортировке одного и того же символа но с разным регистром.
Надеюсь описал дотупно.
З.Ы. И еще хотелось бы еще услышать о других вариантах, но реализованных на сервере.(Просто интересно)
← →
Fin © (2005-02-19 17:19) [3]З.З.Ы. Да и как правельно заметил Anatoly Podgoretsky это всеже не сортиовка а упорядоченная выборка.
← →
Chel (2005-02-19 17:32) [4]Fin, а можно поподробней и с комментарием по каждой строчке.
← →
Johnmen © (2005-02-19 17:43) [5]>Chel
Может тебе ещё ключ от квартиры ?
← →
Chel (2005-02-19 17:49) [6]Johnmen не надо грубить, мне срочно надо а разбираться в написанном не когда. Раз написал текст, дак уж бы и прокементировал бы общие направления.
← →
Johnmen © (2005-02-19 18:01) [7]>Chel
Да ты шо ???????????? Где грубость увидел то ?????????????????7
Просто имей в виду, что когда за тебя что-то делают, то это стОит денег. Причём, с надбавкой за срочность.
Ку ?
← →
Anatoly Podgoretsky © (2005-02-19 18:03) [8]Chel (19.02.05 17:49) [6]
Ну если сейчас нет времени, то отложи на более поздний срок, когда оно появится.
← →
Chel (2005-02-19 18:13) [9]to: Johnmen: какие деньги, я просил о помощи на общественном форуме, сам в этом деле не очень, мне дали код но без комментариев для меня с моим уровнем познаний на данный момент не вьехать, а откладывать по совету анатолия на поздний срок, не когда горю, сроки поджимают.
to: Fin ау, ты где, как же насчет пояснений и лучше поподробней.
И еще Johnmen откуда у студентов деньги?????
← →
Fin © (2005-02-19 18:26) [10]
> Chel
Я ТЕБЯ НЕ КУДА НЕ ПОСЫЛАЛ? (это не грубость)
← →
Anatoly Podgoretsky © (2005-02-19 18:28) [11]Даже при очень плохих знания смог бы сделать два поля и упорядочивать по ним, когда появятся знания то сможешь сделать это на профессиональном уровне, а пока делай на любительском.
Проход то по строке с цельль определения конца цифр и начала букв, наверно в состоянии сделать, если нет то еще рано браться за программирование и особенно за базы, ущерб может быть большой.
← →
Johnmen © (2005-02-19 19:18) [12]>Anatoly Podgoretsky © (19.02.05 18:28) [11]
Так он за программирование и не берётся. Просто хочет, чтобы ему его задание (курсовую/диплом?) сделали, да побыстрей, да побесплатней...
← →
Anatoly Podgoretsky © (2005-02-19 19:20) [13]Его проблема, если есть деньги то ему напишут любой проект, если нет то пусть ищет энтузиаста
← →
Johnmen © (2005-02-19 19:26) [14]Вот он и ищет.........
Но, главное, почему ЗДЕСЬ ???
← →
Anatoly Podgoretsky © (2005-02-19 19:36) [15]Плохой он искатель, а насчет почему, ну наверно думает так о местном контингете и не учитывает, что интеллект у большинства он достаточно высокий.
← →
Chel (2005-02-19 19:45) [16]Да я ищу, и похоже не в том месте, а не в том потому что вы и сами не знаете как что либо сделать, а Fin и сам наверное где то спер код а сам и не знает как это работает, поэтому и не коментирует.
← →
Anatoly Podgoretsky © (2005-02-19 19:55) [17]Трудно тебе придется в жизни, бить будут ногами.
← →
Chel (2005-02-19 20:11) [18]
> Anatoly Podgoretsky © (19.02.05 19:55) [17]
> Трудно тебе придется в жизни, бить будут ногами.
из чего такие выводы?
← →
Anatoly Podgoretsky © (2005-02-19 21:34) [19]Когда будут бить и спросишь за что.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c