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

Вниз

Проблема с сортировкой текстовых полей   Найти похожие ветки 

 
Stanislav ©   (2006-09-21 12:02) [0]

Наверное я не один сталкиваюсь со следующей проблемой.
Нужно отсортировать текстовое поле, в которое записаны цифры в таком виде:
1
1.1
1.1.1
1.2
2
3
...
10
11


 
Ega23 ©   (2006-09-21 12:10) [1]

Я обычно рядышком ещё одно поле завожу типа int  - порядок сортировки. И сортирую уже по нему.


 
zdm ©   (2006-09-21 12:24) [2]

да есть такая трабла, и ega23 прав-это типа классическое дерево, но, есть и альтернативный вариант, к сожалению я не могу тебе привести функцию, я сейчас её сам пишу(а она была, написана другим программером а кода конечно нет). Вообщем логика такая, (и кстати лучше не 1,1.1 а 1., 1.1.) ну и вообщем, ф-ция считает кол-во точек, а они соответственно и являются вложениями, а дальше была ВЬЮХА которая, разбивала, от определенного кол-ва точек, ну типа от m-точек до n-точек, и во ВЬЮХЕ запрос,
select ..... order by items1, items2 и т.д. т.е. items1, items2 это преобразованные значения(1., 1.1., 1.1.2. и т.д.) но уже без точек, т.е. как int, может чего упустил в своём рассказе, но на самом деле все не так сложно, и доп.полей не нужно


 
sniknik ©   (2006-09-21 12:44) [3]

> но на самом деле все не так сложно, и доп.полей не нужно
только тормоза

с сортировкой по специальному числовому полю это самый быстрый вариант.

частично (с первой определяемой цифрой), т.е. для показаного в примере пойдет
SELECT * FROM xxx
ORDER BY CAST(CASE WHEN CHARINDEX(".", xx) > 0 THEN LEFT(xx, CHARINDEX(".", xx)-1) ELSE xx END AS INT), xx


 
zdm ©   (2006-09-21 12:46) [4]

чудес конечно не бывает и за все приходится расплачиваться, тебе самому выбирать, что важнее скорость или объем БД


 
Stanislav ©   (2006-09-21 12:55) [5]

Спасибо за варианты, буду пробовать, если естье еще решения пишите, потом напишу что выбрал.


 
zdm ©   (2006-09-21 13:00) [6]


> sniknik ©   (21.09.06 12:44) [3]

И ещё не забывайте, что не всегда есть возможность реструктуировать БД!


 
stone ©   (2006-09-21 13:04) [7]

create table #t (Field varchar(10))

insert into #t
select "1"
union all
select "1.1"
union all
select "1.1.1"
union all
select "1.2"
union all
select "2"
union all
select "3"
union all
select "10"
union all
select "11"

select Field, cast(left(Field, case when CHARINDEX(".", Field) > 0  then CHARINDEX(".", Field) - 1 else len(field) end) as int) from #t order by 2,1

drop table #t


 
Stanislav ©   (2006-09-21 14:02) [8]

Сделал функцию на основе sniknik ©   (21.09.06 12:44) [3]
смотрите, может кто подскажет, как оптимизировать
CREATE FUNCTION SORTSTR (@NUMBERSTR NVARCHAR(50),@LEVEL INT)
RETURNS INT AS  
BEGIN
DECLARE @A INT,@L INT, @R INT, @NS NVARCHAR(50)

SET @L=1
SET @NS=@NUMBERSTR
SET @A=1

WHILE @A>0 AND @L<=@LEVEL
BEGIN
 SET  @A=CHARINDEX(".", @NUMBERSTR)
 SET @R=CAST(CASE WHEN @A > 0 THEN LEFT(@NS, @A-1) ELSE @NS END AS INT)
 SET @NS=STUFF(@NS,1,@A,"")
 SET @L=@L+1
END

RETURN @R

END


Вызывать так:
Select *,DBO.SORTSTR(POLE,1) AS S1,DBO.SORTSTR(POLE,1) AS S2,DBO.SORTSTR(POLE,1) AS S3 from
(select "1" as POLE
UNION
select "2" as POLE
UNION
select "1.1" as POLE
UNION
select "1.2.1" as POLE
UNION
select "1.10.2" as POLE
UNION
select "3" as POLE
UNION
select "4" as POLE
UNION
select "10" as POLE
UNION
select "11" as POLE) as Q
ORDER BY S1,S2,S3


 
Stanislav ©   (2006-09-21 14:06) [9]

Извеняюсь
Вызывать так:
Select *,DBO.SORTSTR(POLE,1) AS S1,DBO.SORTSTR(POLE,2) AS S2,DBO.SORTSTR(POLE,3) AS S3 from
(select "1" as POLE
UNION
select "2" as POLE
UNION
select "1.1" as POLE
UNION
select "1.2.1" as POLE
UNION
select "1.10.2" as POLE
UNION
select "3" as POLE
UNION
select "4" as POLE
UNION
select "10" as POLE
UNION
select "11" as POLE) as Q
ORDER BY S1,S2,S3



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

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1160570539
AlexeyT
2006-10-11 16:42
2006.11.19
Проблема с WebBrowser.OnFileDownload


15-1162535249
_longint
2006-11-03 09:27
2006.11.19
unsigned 64-bit


2-1162546537
#0FFFF
2006-11-03 12:35
2006.11.19
PopupMenu


15-1162322057
DillerXX
2006-10-31 22:14
2006.11.19
Помогите с Матаном немного


15-1162194598
virspb
2006-10-30 10:49
2006.11.19
Требуется разработчик ПО, СПб, 1000-1300$