Date 在SSRS报告中使用AS400日期
使用IBMDA400 OleDb提供程序对AS400运行SELECT似乎会将日期作为字符串值返回,当您尝试将日期格式应用于字段时,SSRS只是嘲笑您。我在选择中尝试了一个简单的强制转换,但没有效果 如何从iSeries OleDb提供程序获取实际的DBTYPE_DBDATE结构 我应该提到,所讨论的日期都是由带有日期类型的UDF返回的。IBM似乎将日期类型映射为DBTYPE\u STR OleDb类型。表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们 您可以使用命令、或查询SYSIBM.SQLCOLUMNS表来查看字段定义Date 在SSRS报告中使用AS400日期,date,reporting-services,oledb,ibm-midrange,Date,Reporting Services,Oledb,Ibm Midrange,使用IBMDA400 OleDb提供程序对AS400运行SELECT似乎会将日期作为字符串值返回,当您尝试将日期格式应用于字段时,SSRS只是嘲笑您。我在选择中尝试了一个简单的强制转换,但没有效果 如何从iSeries OleDb提供程序获取实际的DBTYPE_DBDATE结构 我应该提到,所讨论的日期都是由带有日期类型的UDF返回的。IBM似乎将日期类型映射为DBTYPE\u STR OleDb类型。表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们 您可以使用命令、或查询SYSI
更新 在使用IBMDA400提供程序进行进一步测试后,我发现Convert Date Time To Char属性隐藏在OLE DB Technical Reference(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数据类型,请参阅。地址是133
IBM i Access for Windows OLE DB技术参考 IBM i OLE DB提供程序函数>特殊属性 将日期时间转换为字符 指定将DB2forIBMi日期、时间和时间戳数据类型转换为相应的PC数据类型,反之亦然 设置和返回值 设置或返回以下字符串值之一。默认值为“TRUE” “正确” DB2forIBMi日期、时间和时间戳数据类型被视为字符串。读取IBM i数据时,这些值将转换为字符串。将数据写入系统时,字符串应作为这些值的输入。日期数据类型支持的字符串格式为ISO格式:yyyy-mm-dd。时间数据类型支持的字符串格式为ISO格式的早期版本:hh.mm.ss。时间戳数据类型支持的字符串格式为:yyyy-mm-dd-hh.mm.ss.nnnn “假” DB2forIBMi日期、时间和时间戳数据类型将转换为PC日期、时间和时间戳数据类型。在仅支持变量日期数据类型(如Visual Basic)的环境中使用此值时应小心。由于变量日期数据类型的限制导致截断或溢出,您可能会遇到意外错误 以下是将日期时间转换为字符为FALSE时的其他注意事项
- variant Date数据类型实际上是一个时间戳,它不支持微秒(DB2forIBMi时间戳的精度)。OLE DB提供程序将截断分数时间戳而不报告错误。例如,1990-03-02-08.30.00.100517将变为1990-03-02-08.30.00.000000。所有更新或插入的时间戳值都将有0微秒李>
- 闰秒溢出错误。OLE DB时间戳最多允许两个闰秒(值为60或61)。DB2forIBMi支持的最大值为59。如果设置了闰秒,则返回溢出错误李>
- 变量日期数据类型不支持ISO日期或时间戳的数据限制。在许多数据库(包括DB2forIBMi)中用作默认日期的值“0001-01-01”将导致溢出李>
- 对于某些较旧的时间数据类型格式,DB2forIBMi支持24:00:00的时间值。OLE DB提供程序将24:00:00的值转换为00:00:00,而不显示任何错误消息或警告李>
- 通常,对于VB变量,日期值1899-12-30(即0日期)用于表示仅限时间的变量日期。午夜时间(00:00:00)用于表示仅限日期的变体日期李>
<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider:=“IBMDA400”;
.Properties('Convert Date Time To Char'):=“TRUE”;
或
.Open('Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE','Userid','Password');
PowerBuilder示例
<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider=“IBMDA400”
SetProperty(),“将日期时间转换为字符”,“TRUE”)
或
.Open(“Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE”、“Userid”、“Password”)
Visual Basic示例
<connection>.Provider := 'IBMDA400';
<connection>.Properties('Convert Date Time To Char') := "TRUE";
<connection>.Provider = "IBMDA400"
SetProperty(<connection>), "Convert Date Time To Char", "TRUE")
<connection>.Provider = "IBMDA400"
<connection>.Properties("Convert Date Time To Char") = "TRUE"
.Provider=“IBMDA400”
.Properties(“将日期时间转换为字符”)=“TRUE”
和/或
<connection>.Open "Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")
.Open“Provider=IBMDA400;数据源=SystemA;将日期时间转换为Char=TRUE”、“Userid”、“Password”)
表中的字段可能未定义为日期类型。您需要在查询中使用函数转换它们
您可以使用命令、或查询SYSIBM.SQLCOLUMNS表来查看字段定义
更新 在使用IBMDA400提供程序进行进一步测试后,我发现Convert Date Time To Char属性隐藏在OLE DB Technical Reference(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数据类型,请参阅。地址是133
IBM i Access for Windows OLE DB技术参考 IBM i OLE DB提供程序函数>特殊属性 将日期时间转换为字符 指定数据库的转换