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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 15:29   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Сортировка по возрастанию

Доброго времени суток!

В VBA использую такой код
Код:
   con.Open ConnectionString            'Открыли базу
   'Готовим строку запроса
   strSQL = "SELECT "
   strSQL = strSQL & "Дата, Время, Счет№, УнКодКлиент, УнКодРаботы, УнКодМастера,  Цена, Скидка, Примечание" 'Список столбцов
   strSQL = strSQL & " FROM " & "DBСчета"          'Имя таблицы
   strSQL = strSQL & " WHERE "
   strSQL = strSQL & "Дата=#" & Mid$([ИД_СчетДата], 7, 4) & "-" & Mid$([ИД_СчетДата], 4, 2) & "-" & Left([ИД_СчетДата], 2) & "#" 'Условия
   strSQL = strSQL & " ORDER BY Счет№"         'Условие сортировки
   
   rst.Open strSQL, con                 'Запрос данных из базы
Это запрос сортируется результат так:
"1 10 11 12 2 20 21 22 3 31 " и т.д.
Как получить правильную сортировку по возрастанию?
1 2 3 10 11 12 20 21 22 31 и т.д.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 15:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ковертировать Счет№ из символьного в цифровой и сортировать по результату
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2014, 16:14   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ковертировать Счет№ из символьного в цифровой и сортировать по результату
Сработало. Но не то. Это сейчас номер простой, а может быть и сложным вида "2014-n". А перевод в число, не даст возможность вводить такие номера.
Печально, но похоже задача не решаемая в таком контексте.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 16:25   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Символьные сортирует по алфавиту, в этом смысле "10" меньше "2". Но "10" больше "_2" (вместо подчеркивания пробел). Но если еще и буквы, да в не фиксированных местах, то никак
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2014, 17:10   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

В других местах подобный проблемы решались путем добавления незначащих нулей. Перед сортировкой форматируем строку скажем до 10 символов с заполнителем "0". Сортируем, все встает как нужно. А возвращает значение в не форматированном виде.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 17:11   #6
mirkul
Пользователь
 
Регистрация: 16.07.2014
Сообщений: 62
Сообщение

Измени запрос вот так:
Код:
...
  strSQL = strSQL & " ORDER BY Счет№ DESC" 
...
DESC - убывание
ASC - возрастание
mirkul вне форума Ответить с цитированием
Старый 06.08.2014, 17:20   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от mirkul Посмотреть сообщение
Измени запрос вот так:
Код:
...
  strSQL = strSQL & " ORDER BY Счет№ DESC" 
...
DESC - убывание
ASC - возрастание
По умолчанию вся сортировка ASC. Но попробовал. Результат тот же.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 21:02   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Это сейчас номер простой, а может быть и сложным вида "2014-n"
2014-n - это не номер.

asd больше 123? - а если это 2 номера? ))
rrrFer вне форума Ответить с цитированием
Старый 07.08.2014, 08:51   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Печально, но похоже задача не решаемая в таком контексте.
задача не простая и не универсальная, но, тем не менее, вполне себе решаемая.
Хороший вариант решения - хранить цифровую часть и буквенную в отдельных полях таблицы. Тогда сортировка будет осуществляться просто и эффективно (ORDER BY DogNumeric, DogNumArcticle )

Если это не приемлимо по каким-то причинам, то можно попытаться написать пользовательскую функцию, задача которой вытаскивать из строкового поля нужные для сортировки поля и преобразовавывать их в нужный вид (путём добавления ведущих нулей к цифровой части, например).

Как решать конкретную вашу задачу - вам виднее
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка по возрастанию и убывавнию Randy.Mandy Microsoft Office Excel 5 21.02.2012 01:28
Сортировка массива во возрастанию. Abuhamed PHP 7 01.12.2011 23:06
Сортировка по убыванию-возрастанию Gaudi Microsoft Office Excel 4 29.09.2011 15:08
Сортировка строк по возрастанию westlinex Паскаль, Turbo Pascal, PascalABC.NET 1 31.01.2011 01:57
Сортировка по возрастанию в Stringgride Китти Помощь студентам 2 22.12.2009 23:42