【问题标题】:Pervasive Database order by statementPervasive Database 按语句排序
【发布时间】:2020-06-18 07:21:49
【问题描述】:

我有以下 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

当我运行此语句时,我收到以下错误:

![ODBC-Engine 接口] 表达式错误

在没有ORDER BY 子句的情况下正确执行语句。

我该如何写这个ORDER BY 子句?

【问题讨论】:

  • 请详细说明错误信息。

标签: sql sql-order-by pervasive


【解决方案1】:

您正在尝试按子查询之外的字段进行排序。 让我们试试同样的代码(下面是 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

【讨论】:

  • 这也不起作用,我收到相同的错误消息
【解决方案2】:

如果 SQL-Server(T-SQL) 中使用的代码可以使用以下方式实现: 子字符串函数接受字符转换,因此代码已按以下方式重写。子字符串函数的语法: 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

【讨论】:

  • 我正在使用 Perasive 数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多