Advantage SQL中的时间比较

时间:2015-02-27 16:03:57

标签: sql advantage-database-server

尝试在优势查询中进行时间比较。无法在Advantage文档中找到答案。好像它应该很简单。

表定义是:

CREATE TABLE TBL ( 
      ID AutoInc,
      Date Date,
      [T] Time
)

基于this book on google books我认为我应该能够对这样表达的文字进行比较:

SELECT * FROM TBL WHERE [T] > '9:00:00 AM'

但是抛出

Error 7200:  AQE Error:  State = S0000;   NativeError = 2124;  [iAnywhere Solutions][Advantage SQL Engine]Invalid operand for operator: > [Invalid TIME] -- Location of error in the SQL statement is: 27

2 个答案:

答案 0 :(得分:1)

你应该总是使用TIME'HH:MM:SS'(24h)或TIME'HH:MM:SS am'(12h)文字格式:

SELECT * FROM TBL WHERE [T] > TIME'09:00:00 am'

我认为你得到2124错误,因为你使用大写的上午/下午表示法,或者因为你没有使用前导零。

另见:

http://devzone.advantagedatabase.com/dz/webhelp/advantage11/master_sql_literals.htm

答案 1 :(得分:1)

来自SQL Literals下的文档(在ADS帮助文件中, Advantage开发人员指南,第II部分 - Advantage SQL,第11章 - Advantage SQL简介,SQL文字

  

时间文字用单引号括起来,并使用以下四种格式之一:HH:MM,HH:MM AM(或PM),HH:MM:SS或HH:MM:SS AM(或PM) )。如果文字中缺少AM(或PM),则假定为24小时。时间文字的AM / PM部分不区分大小写。以下是有效的时间文字:

     

'19:10'
  '4:43 AM'   '9:00:45'   '22:19:59'

使用此表定义和数据:

create table #temp (ID AutoInc,
                    Dt Date,
                    Tm Time);

insert into #temp (Dt, Tm) values (CurDate() - 1, CurTime());
-- Wait to make sure time changes slightly
insert into #temp (Dt, Tm) values (CurDate(), CurTime());

select * from #temp;

/* Output:
    ID   Dt           Tm        
    --   ----------   -----------
    1    02/26/2015   11:50:22 AM 
    2    02/27/2015   11:51:02 AM
*/

以下查询根据时间正确检索正确的行(当然,调整到适当的数据时间):

select * from #temp where Tm = '11:50:22 AM'

使用ARC32针对具有本机ADT表类型的Advantage 10.10进行测试。