Порядок повсеместной базы данных по операторам - PullRequest
0 голосов
/ 18 июня 2020

У меня есть следующий оператор SQL:

select * 
from
    (select  
         id,
         left(id, 6) as Hauptnummer,
         convert(substring(id, 8), SQL_BIGINT) as Detailnummer
     from 
         Proben 
     where 
         id like '%-%'  
         and id like '2%' 
         and length(id) > 7) as a 
order by  
    Hauptnummer desc, Detailnummer

Когда я запускаю этот оператор, я получаю следующую ошибку:

! [ODB C -Engine Interface] выражение error

Оператор выполняется правильно без предложения ORDER BY.

Как я могу написать это предложение ORDER BY?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Если код используется в SQL -Server (T- SQL), это может быть достигнуто с помощью следующего: Функция Substring принимает преобразование символов и, следовательно, код был переписан следующим образом. Синтаксис для функции подстроки: SUBSTRING(string, start, length)

например:

select * 
from
    (select  
        id,
        left(id, 6) as Hauptnummer, 
        substring(convert (varchar(20), id ), 1, 2) as Detailnummer 
     from 
        Proben 
     where 
        id like '%-%'  
        and id like '2%'  
        and len(id) > 7) as a  /* SQL server it is len instead length */
order by  
    Hauptnummer desc, Detailnummer
0 голосов
/ 18 июня 2020

Вы пытаетесь упорядочить по полям, не входящим в подзапрос. Давайте попробуем то же самое с этим кодом (ниже синтаксис MS SQL):

/* declare and create temp (in-memory) table */
declare @proben table
(
    id nvarchar(24)
)

/* insert come test data to table */
insert @proben(id) values('2345-67890')
insert @proben(id) values('54654645-6257890')
insert @proben(id) values('2345-67890546541')
insert @proben(id) values('4355343542345-67890')

/* check of select of your script */
select *
from (
    select
        id,
        left(id, 6) as Hauptnummer,
        CAST(substring(id, 8, 0) AS BIGINT) as Detailnummer
    from
        @proben
    where
        id like '%-%'
        and id like '2%'
        and len(id) > 7
    order by
        Hauptnummer desc, Detailnummer
    ) as a
order by
    a.Hauptnummer desc, a.Detailnummer
...