Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2018, 15:19   #1
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию натуральная сортировка

есть sql запрос
Код:
SELECT Stand.*, Gost.Gost_ID AS GostID, Gost.Name AS GostName,
Okp.Okp_ID AS OkpID,Okp.Klass,Okp.Naim FROM Standart.dbo.Stand, Standart.dbo.Gost, Standart.dbo.Okp
WHERE Stand.Gost_Id=Gost.Gost_Id AND Stand.Okp_Id=Okp.Okp_Id and Stand.Name = 'Резистор'
order by 
case patindex ('%м[0-9]%',Stand.Mark ) When 0 Then Mark 
else left(Stand.Mark ,patindex ('%м[0-9]%',Stand.Mark )-1) end ,
case patindex ('%м[0-9]%',Stand.Mark ) When 0 then 0 
else cast(substring(Stand.Mark ,patindex ('%м[0-9]%',Stand.Mark )+1,
case patindex ('%[^0-9]%',substring(Stand.Mark ,patindex ('%м[0-9]%',Stand.Mark )+1,1000)) When  0 Then 1000
else patindex ('%[^0-9]%',substring(Stand.Mark ,patindex ('%м[0-9]%',Stand.Mark )+2,1000)) end) as int) end
который сортирует текст такого типа:
текст 5
текст 6
текст 10
как отсортировать текст типа:
текст 2
текст 2.2
текст 2.10?
или вообще текст с разделителями '-', ',', 'x'?
Etsareva вне форума Ответить с цитированием
Старый 09.04.2018, 15:49   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Так же как и в приведенном запросе - строить громоздкое вычисляемое поле и по нем сортировать. И работать в конце концов не будет потому, что еще другие ситуации всплывут и приехали ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2018, 15:57   #3
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

понятно...
Etsareva вне форума Ответить с цитированием
Старый 09.04.2018, 16:11   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Попробуй функцию сделать возвращающую строку в нужном виде, по крайней мере не так громоздко и возможностей больше чем в запросе. Скорость упадет к сожалению
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2018, 16:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

судя по всему речь идёт о MS SQL server.

Если наплевать на производительность, то можно
1) сделать вычисляемую функцию, которая возвращает новую строку
(например, как я уже предлагал в одной из десятка ваших тем - ТУТ)
2) использовать эту функцию в качестве условия в SORT BY


Аватар, мысли то сходятся!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32