'[pervasive][ODBC Engine Interface]Invalid date, time or timestamp value' 当试图比较日期时

'[pervasive][ODBC Engine Interface]Invalid date, time or timestamp value' When trying to compare dates

我无法克服这个错误。

我有一个以 mmddyy 格式存储的日期字段。

我只想 return 记录日期在 2019 年 12 月 31 日之后的记录。

我知道 Pervasive 默认使用 yyyy-mm-dd。

我正在使用此代码重新格式化日期:

Convert(Concat('20',Concat(Right(Date,2),Concat('-',Concat(Left(Date,2),Concat('-',Substring(Date)))))),SQL_DATE)

日期值为 081820 returns 44061.

Convert('2019-12-31',SQL_DATE)

returns 43830.

And Convert(Concat('20',Concat(Right(Order_Header.Date_Shipped,2),Concat('-',Concat(Left(Order_Header.Date_Shipped,2),Concat('-',Substring(Order_Header.Date_Shipped,3,2)))))),SQL_DATE) > Convert('2019-12-31',SQL_DATE)

returns

[pervasive][ODBC Engine Interface]Invalid date, time or timestamp value

我试过转换和转换...有人知道我在我的 And 语句(在我的 where 子句中)做错了什么或者我如何解决这个错误?

您的数据中的某个日期可能有无效的值。你应该检查一下记录。日期规范要求月份为 1 到 12,一天为 1 到 31,具体取决于月份(因此 2 月 30 日无效),年份为 0000 到 9999。这样的月份,您需要检查还有几天:

insert into sodate (f1) values ('442020');
insert into sodate (f1) values ('  2020');
select f1, left(f1,2) from sodate where left(f1,2) not in ('01','02','03','04','05','06','07','08','09','10','11','12')

第一个例子中的substring缺少参数。一旦获得格式正确的日期 ('yyyy-mm-dd'),您应该能够将其与日期值进行比较,而无需将其转换为 SQL_DATE 数据类型。还有一件事,你在所有年份之前都添加了“20”,如果你的数据的日期是 2000 年之前的,会发生什么情况?你需要考虑到这一点。在 PCC 中,当我 运行:

select Convert('2019-12-31',SQL_DATE)

我得到:

    EXPR_1
==========
12/31/2019

我使用了以下内容:

create table sodate (f1 char(6));
insert into sodate (f1) values ('123119');
insert into sodate (f1) values ('081818');
insert into sodate (f1) values ('081820');
insert into sodate (f1) values ('082020');
select * from sodate;

-- This should give the results you want
select concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) from sodate where
concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) > '2019-12-31';
-- This query shows you don't need the CONVERT to compare a date.  
select concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) from sodate where

concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3 ,2)) >= 现在()

得到如下结果:

EXPR_1        
==============
2019-12-31    
2020-08-18  

第二个查询给出:

EXPR_1        
==============
2020-08-20