Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка поля текст с цифрами 
V
    Опции темы
2fank
Дата 1.2.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



Добрый день!

Имею таблицу с записями вида

+-------------------+
|        Order        |
+-------------------+
|  Заказ № 1       |
|  Заказ № 13     |
|  Заказ № 14     |
|  Заказ № 12     |
|  Заказ № 13     |
|  Заказ № 121   |
|  Заказ № 1231 |
+-------------------+

Нужно SQL запросом определить номер последнего заказа, из-за плохой сортировки Access'ом таких полей, вот, столкнулся с проблемой  smile 
Пробую такой запрос:
Код

SELECT Top 1 (Order) FROM Orders ORDER BY Format(Right(Order, Len(Order) - InStr(Order, '№')) , '0###') DESC

Помогает только, если номер заказа не более двух цифр (например "Заказ № 13"), а если номер заказа состоит более чем из 2-х цифр  (например "Заказ № 1123") выдает ошибку :(

Это сообщение отредактировал(а) 2fank - 1.2.2008, 17:19
PM MAIL   Вверх
alexIrish
Дата 1.2.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Если у тебя в начале строки всегда стоит "Заказ № ", то сортируй по CInt(mid("Field",8,n)).
n сделай достаточно большим что бы колво цифр в номерах твоих заказов попадали в диапазон n

Получится сортировка чисто по номеру заказа, наверное.
По крайней мере попробуй.

Da i prosto Mid("Order",8,n) dolzhno rabotat'


Это сообщение отредактировал(а) alexIrish - 1.2.2008, 17:21
PM MAIL   Вверх
2fank
Дата 1.2.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



Иногда бывает, что "Заказ №13", но знак № есть всегда
PM MAIL   Вверх
alexIrish
Дата 1.2.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Т.е. после Заказ № может стоять пробел а мозет и нет?
Ну тада надо думать как привести ето безобразие к единому виду.
Вообще не очень понимаю зачем нужно "Заказ №" вносить в поле таблицы.
Можно ведь просто номер хранить smile 
PM MAIL   Вверх
kapbepucm
Дата 4.2.2008, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



2fank, а перед цифрой всегда пробел стоит?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
2fank
Дата 4.2.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



Цитата(kapbepucm @ 4.2.2008,  09:17)
2fank, а перед цифрой всегда пробел стоит?

Не всегда :(
Эти данные вносяться в ручную
PM MAIL   Вверх
kapbepucm
Дата 4.2.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Пишешь в модуле
Код
Public Function GetNumber(Stroka As String) As Long
  Dim I As Long
  For I = Len(Stroka) To 1 Step -1
    If (Asc(Mid(Stroka, I, 1)) >= 48) And (Asc(Mid(Stroka, I, 1)) <= 57) Then GetNumber = CLng(Mid(Stroka, I)) Else Exit For
  Next I
End Function
, ну и запрос
Код
SELECT TOP 1 ([Order]) AS N FROM Orders ORDER BY getnumber(order) DESC;



--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
2fank
Дата 5.2.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



kapbepucm, большое спасибо! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0839 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.