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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.078 c
3-1108705826
Layner
2005-02-18 08:50
2005.03.20
Как передать параметр в ХП MSSQL


14-1109711634
Игорь Шевченко
2005-03-02 00:13
2005.03.20
Катя, с днем рождения!


1-1109825588
01
2005-03-03 07:53
2005.03.20
Как достучаться до того, кто вызвал POPUP?


14-1109668797
ex080D:07BBh
2005-03-01 12:19
2005.03.20
Что будете дарить на 8 марта своим девушкам?


1-1109834501
3443
2005-03-03 10:21
2005.03.20
Помощь начинающим