0

我有这个简单的 SQL 脚本:

SELECT DATE(SUBSTR( '19310205' , 1 , 4) 
|| '-' || SUBSTR ('19310205' , 5 , 2) 
|| '-' || SUBSTR('19310205', 7 , 2)) 
FROM MY_TABLE;

每当我在 iSeries 导航器上运行脚本时,我都会得到预期的输出,即

1931-02-05

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

++++++++

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

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

4

3 回答 3

4
  • 在您的 AS/400 仿真程序会话中,按“F13=Services”。

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

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

来自 IBM 知识中心,“ Rational Developer for i7.1.0 ”:

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

于 2017-11-06T11:02:04.720 回答
2

我只是想建立在 Richard Evans 的答案之上,但由于要发表评论的内容太多,我将把它作为一个新的答案。

IBM i 有一个本机日期类型,可以存储从 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*CYMDC三位数年份格式中的 表示日期的年份部分的两位最高有效数字,其中:

0 => 1900 - 1999
1 => 2000 - 2099
2 => 2100 - 2199
...
9 => 2800 - 2899

最后*LONGJUL是四位数的儒略年格式。

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

于 2017-11-06T12:43:21.210 回答
0

使用varchar_format()函数以任何格式返回日期的字符表示。无论会话默认值或运行位置如何。

SELECT                               
cast(                                
varchar_format(                      
cast(                                
DATE(SUBSTR( '19310205' , 1 , 4)     
|| '-' || SUBSTR ('19310205', 5 , 2) 
|| '-' || SUBSTR('19310205', 7 ,2))  
 as timestamp )                      
, 'YYYY-MM-DD')                      
as char(10)) as mydate               
 FROM sysibm/sysdummy1               

MYDATE
1931-02-05
******** 数据结束 ********

于 2017-11-10T21:34:35.237 回答