我正在尝试在AS400上的SQL中进行子选择并获得“数据转换或数据映射错误” - 我很确定它与SQL在子选择中处理日期的方式有关(特别是它正在改变通过在十进制字段中添加逗号的格式,当它进行下一次选择时它会变得混乱) - 有人可以为我确认这个吗?也许建议我如何解决这个问题?
基本上,我有类似下面的内容,日期为十进制,格式如下:CCYYMMDD(即如果您只是选择日期为CC,YYM,MDD)。日期来自table3
SELECT *
FROM TABLE1 A
CROSS JOIN TABLE2 B
LEFT OUTER JOIN (SELECT *
FROM TABLE3 C
LEFT OUTER JOIN TABLE4 D ON (blah)
INNER JOIN TABLE5 E ON (blah)
WHERE DATE >= 20080101
AND DATE <= 20090101
) AS C ON (blah AND blah)
答案 0 :(得分:4)
我对AS / 400的经验很少并且过时了,但你的问题是经典的分而治之。
隔离子查询 - 它本身运行正常吗? 然后从表1开始,确保交叉查询有效 然后添加子查询。
我不知道AS / 400是否支持它,但SQL Server的公用表表达式非常有用 - 基本上是本地范围的视图。我只提到它,因为您可以创建一个视图,这是您的子查询,以便更好地理解。
总而言之,我怀疑你的问题是在'等等'中。)
答案 1 :(得分:2)
如果您正在使用本机AS400 db,它的风格是:DB2 for iSeries(不要与DB2 for Linux和其他平台混淆)
如果是这样,表3中的DATE字段是CCYYMMDD格式的十进制数字,如你所说,你的比较就好了。逗号是应用于显示的小数的格式,不与值一起存储。
我同意n8wrl,尝试一个简单的“从表3中选择DATE&gt; = 20080101”并查看是否运行,并从那里开始工作。
blah,blahs非常敏感:)答案 2 :(得分:0)
要正确回答这个问题,将有助于了解AS400正在使用的“SQL”的味道。 AS400本身只是一个服务器。 AS400可以与许多数据库风格一起使用,例如DB2,MS SQL Server,Oracle等......
快速尝试一下,不知道我会说你需要在你的日期值附近放置哪种SQL风格,这样它们就不会被视为数值。
WHERE DATE&gt; ='20080101' AND DATE&lt; ='20090101'