Конференция "Базы" » Сортировка и SQL [D7, MSSQL]
 
  • ziArt (14.07.09 13:01) [0]
    База MS SQL 2000
    Delphi 2006

    Компоненты Ado табл и квери

    выполняю запрос

    SELECT *
    FROM tbZava, tbFak
    WHERE tbZava.idFak*=tbFak.idFak
    ORDER by vcKOdOsSprav


    как результат

    6Б-1
    6Б-10
    6Б-11
    ...
    6Б-19
    6Б-2
    6Б-20

    что сделать что бы нормально шло после сортировки
    6Б-1
    6Б-2
    ....
    6Б-10
    6Б-11
    ...
    6Б-19

    6Б-20
  • а это и есть нормально.. учи, что такое код символа и какие коды каким символам соответствуют, тогда поймешь
  • Anatoly Podgoretsky © (14.07.09 13:11) [2]
    where и вот здесь или многоэтажная функция или капут.
    И с чего ты решил, что 6Б-1 это число, а что ты будешь делать для 6B-1a/b17 и 1B и 11Б
  • sniknik © (14.07.09 13:26) [3]
    ну если все только так как написано, а не [2]
    то написать
    ORDER by Left(vcKOdOsSprav, 2), Cast(SUBSTRING (vcKOdOsSprav, 4, 10) AS Int)

    причем первая часть с Left в сортировке именно для приведенных данных лишняя.
  • sniknik © (14.07.09 13:33) [4]
    а вообще поле бы разбить на 2, строковое и числовое, тогда избежишь проблем типа ввода туда чего то нестандартного.
    ну или формировать номер как для документов обычно, с фикстрованной длинной поля и дополнением нулями, типа
    6Б-000001
    6Б-000002
    ....
    6Б-000010
    6Б-000011
    сортировалось бы как желается.
  • ziArt (15.07.09 10:42) [5]
    Проблема в том что первіх символов может быть и не 2 но структура
    6Х-число, где Х может догодить до 4 симоволов
    сохраняется.
    общую идею я понял, спасибо, будем пробовать
 
Конференция "Базы" » Сортировка и SQL [D7, MSSQL]
Есть новые Нет новых   [134473   +33][b:0][p:0]