Sql AS400模拟器无法处理日期小于1940或大于2039的数据

Sql AS400模拟器无法处理日期小于1940或大于2039的数据,sql,date,ibm-midrange,iseries-navigator,Sql,Date,Ibm Midrange,Iseries Navigator,我有一个简单的SQL脚本: SELECT DATE(SUBSTR( '19310205' , 1 , 4) || '-' || SUBSTR ('19310205' , 5 , 2) || '-' || SUBSTR('19310205', 7 , 2)) FROM MY_TABLE; 每当我在iSeries navigator上运行脚本时,我都会得到预期的输出,即 1931-02-05 但是,当我使用strsql命令在AS400仿真器上运行它时,我得到以下输出: ++++++++ 我不

我有一个简单的SQL脚本:

SELECT DATE(SUBSTR( '19310205' , 1 , 4) 
|| '-' || SUBSTR ('19310205' , 5 , 2) 
|| '-' || SUBSTR('19310205', 7 , 2)) 
FROM MY_TABLE;
每当我在iSeries navigator上运行脚本时,我都会得到预期的输出,即

1931-02-05

但是,当我使用strsql命令在AS400仿真器上运行它时,我得到以下输出:

++++++++

我不知道为什么会这样;我所知道的是,只有1940年至2039年之间的日期运行良好。有人能解释为什么吗

另外,是否有办法成功处理其他日期?

  • 在AS/400仿真器会话中,按“F13=服务”

  • 选择“1.更改会话属性”

  • 将“日期格式”更改为“*ISO”或支持完整日期范围的所需格式

从IBM知识中心,“:

日期是一个由三部分组成的值(年、月和日),表示公历20下的>时间点,假设该时间点从>公元1年开始生效。年部分的范围为0001到9999。日期格式>*JUL、*MDY、*DMY和*YMD只能表示1940到>2039之间的日期。月份部分的范围是1到12。日部分的范围是1到>x,其中x是28、29、30或31,具体取决于月份和年份

  • 在AS/400仿真器会话中,按“F13=服务”

  • 选择“1.更改会话属性”

  • 将“日期格式”更改为“*ISO”或支持完整日期范围的所需格式

从IBM知识中心,“:

日期是一个由三部分组成的值(年、月和日),表示公历20下的>时间点,假设该时间点从>公元1年开始生效。年部分的范围为0001到9999。日期格式>*JUL、*MDY、*DMY和*YMD只能表示1940到>2039之间的日期。月份部分的范围是1到12。日部分的范围是1到>x,其中x是28、29、30或31,具体取决于月份和年份


我只是想建立在理查德·埃文斯的答案之上,但由于评论内容太多,我会把它变成一个新的答案

IBMi有一个本机日期类型,可以存储从0001年1月1日到9999年12月31日的日期。日期类型具有一种格式,其中指定日期的年份部分的位数。影响可接受日期范围的主要分组有两种。两位数年份格式,可接受1940年1月1日至2039年12月31日的日期。它们是:
*MDY
*DMY
*YMD
*JUL
。四位数年份格式可以处理日期类型支持的全部日期范围。它们是
*ISO
*USA
*EUR
*JIS

除了在任何支持日期格式的地方都支持的主要格式外,RPG还支持一些其他日期格式:
*JOBRUN
、三位数年份格式和
*LONGJUL
*JOBRUN
是两位数的年份格式,只能为具有两位数年份的数字和字符日期字段指定。这使用作业日期格式和分隔符值。三位数年份格式可以处理1900年1月1日至2899年12月31日的日期。它们是
*CMDY
*CDMY
*CYMD
。三位数年份格式的
C
表示日期年份部分的两个最有效数字,其中:

0 => 1900 - 1999
1 => 2000 - 2099
2 => 2100 - 2199
...
9 => 2800 - 2899
最后,
*LONGJUL
是一种四位数的年份儒略格式


内部日期以
*ISO
格式存储。其他格式是外部格式。事实上,使用SQL定义表时,您甚至不需要指定日期格式,它只是默认为*ISO。在可以指定格式的地方,指定的只是外部格式。最好对所有工作字段和数据库文件使用
*ISO
,即使在使用DDS时也是如此。然后为面向用户的字段保留其他外部格式,如
*MDY
*DMY
,以将
*ISO
格式转换为更本地化的格式。通过这种方式,您可以存储用户可以输入或查看的全部日期。

我只想基于Richard Evans的答案,但由于评论中的内容太多,因此我会将其作为一个新的答案

IBMi有一个本机日期类型,可以存储从0001年1月1日到9999年12月31日的日期。日期类型具有一种格式,其中指定日期的年份部分的位数。影响可接受日期范围的主要分组有两种。两位数年份格式,可接受1940年1月1日至2039年12月31日的日期。它们是:
*MDY
*DMY
*YMD
*JUL
。四位数年份格式可以处理日期类型支持的全部日期范围。它们是
*ISO
*USA
*EUR
*JIS

除了在任何支持日期格式的地方都支持的主要格式外,RPG还支持一些其他日期格式:
*JOBRUN
、三位数年份格式和
*LONGJUL
*JOBRUN
是两位数的年份格式,只能为具有两位数年份的数字和字符日期字段指定。这使用作业日期格式和分隔符值。三位数年份格式可以处理1900年1月1日至2899年12月31日的日期。它们是
*CMDY
*CDMY
*CYMD
。三位数年份格式的
C
表示日期年份部分的两个最有效数字,其中:

0 => 1900 - 1999
1 => 2000 - 2099
2 => 2100 - 2199
...
9 => 2800 - 2899
最后,
*LONGJUL
是一种四位数的年份儒略格式

内部日期以
*ISO
格式存储。其他格式是外部格式。事实上,当使用SQL定义表时,您甚至不需要使用规范