[英]Using AS400 date in SSRS Report
使用IBMDA400 OleDb提供程序在AS400上运行SELECT似乎会将日期返回为字符串值,当您尝试将日期格式应用于字段时,SSRS只会嘲笑您。 我已经在SELECT中尝试了简单的CAST,但无济于事。
如何从iSeries OleDb提供程序获取实际的DBTYPE_DBDATE结构?
我应该提到,有关的日期都是由类型为DATE的UDF返回的。 IBM似乎将DATE类型映射为DBTYPE_STR OleDb类型。
表中的字段可能未定义为日期类型。 您将需要使用DATE
函数将它们转换为查询的一部分。
您可以使用DSPFFD
命令, 导航器 ,或查询SYSIBM.SQLCOLUMNS表以查看字段定义。
在与IBMDA400提供程序进行进一步测试之后,我发现“ OLE DB技术参考”中隐藏了“ 将日期转换为字符”属性,这是作为带有Access的程序员工具包的一部分而安装的。 默认值为TRUE 。 在连接字符串或属性中将“ 转换日期时间设置为Char = FALSE ”以禁用此“功能”。
这是一个快速的VBA测试:
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=IBMDA400;Data Source=...;User ID=...;Password=...;Convert Date Time To Char=FALSE"
Set rs = cn.Execute("SELECT DATE(NOW()) FROM SYSIBM.SYSDUMMY1")
MsgBox "Returned ADO type: " & rs.Fields(0).Type
有关可能的ADO数据类型,请参见MSDN:DataTypeEnum 。 adDBDate是133。
将日期时间转换为字符
指定将IBM i Date,Time和Timestamp数据类型的DB2转换为相应的PC数据类型,反之亦然。
设置和返回值
设置或返回以下字符串值之一。 默认值是true”。
“真正”
DB2 for IBM i日期,时间和时间戳记数据类型被视为字符串。 读取IBM i数据时,这些值将转换为字符串。 将数据写入系统时,字符串应作为这些值的输入。 Date数据类型支持的字符串格式为ISO格式:yyyy-mm-dd。 时间数据类型支持的字符串格式是ISO格式的早期版本:hh.mm.ss。 Timestamp数据类型支持的字符串格式为:yyyy-mm-dd-hh.mm.ss.nnnnnn。
“假”
DB2 for IBM i日期,时间和时间戳数据类型将转换为PC日期,时间和时间戳数据类型。 在仅支持Variant Date数据类型的环境(如Visual Basic)中使用此值时应小心。 由于变量日期数据类型的限制而导致的截断或溢出,可能会遇到意外的错误。
将日期时间转换为字符为假时,以下是其他注意事项。
备注
该自定义属性在ADO连接对象上可用。 当连接关闭时该属性为读/写,而在连接打开时该属性为只读。
Delphi示例
<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
要么
<connection>.Open('Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char =TRUE', 'Userid', 'Password');
PowerBuilder示例
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
要么
<connection>.Open("Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
Visual Basic示例
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
AND / OR
<connection>.Open "Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
看来正确答案是, 不能 。 IBMDA400提供程序绝对不能将任何类型映射到DBTYPE_DBDATE。
您可以使用DateValue()SSRS函数将返回的DBTYPE_STR值转换为日期/时间序列。 从那里开始,格式功能将起作用。
在北美,我没有问题,DateValue()函数直接解释返回的DBTYPE_STR值,但是,由于日期格式的差异,这在其他语言环境中可能是个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.