在SSRS报表中使用AS400日期

lum

使用IBMDA400 OleDb提供程序在AS400上运行SELECT似乎会将日期返回为字符串值,当您尝试将日期格式应用于字段时,SSRS只会嘲笑您。我已经在SELECT中尝试了简单的CAST,但没有成功。

如何从iSeries OleDb提供程序取回实际的DBTYPE_DBDATE结构?

我应该提到,有关的日期都是由类型为DATE的UDF返回的。IBM似乎将DATE类型映射为DBTYPE_STR OleDb类型。

詹姆斯·奥尔曼

表中的字段可能未定义为日期类型。您将需要使用DATE函数将它们转换为查询的一部分。

您可以使用DSPFFD命令Navigator或查询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:DataTypeEnumadDBDate是133。


IBM i Access for Windows OLE DB技术参考

IBM i OLE DB提供程序功能>特殊属性

将日期时间转换为字符

指定将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)中使用此值时,应格外小心。由于变量日期数据类型的限制而导致的截断或溢出,可能会遇到意外错误。

当“将日期时间转换为字符”为FALSE时,以下是其他注意事项。

  • 可变的Date数据类型实际上是一个时间戳,不支持微秒,这是DB2 for IBM i时间戳的精度。OLE DB提供程序将截断小数时间戳记而不报告错误。例如,1990-03-02-08.30.00.100517将变为1990-03-02-08.30.00.000000。所有更新或插入的时间戳记值将具有0微秒。
  • 飞跃第二次溢出错误。OLE DB时间戳允许最多两个two秒(值为60或61)。DB2 for IBM i支持的最大值为59。如果设置了leap秒,则会返回溢出错误。
  • 变量Date数据类型不支持ISO日期或时间戳的数据限制。在许多数据库(包括用于IBM i的DB2)中用作缺省日期的值“ 0001-01-01”将导致溢出。
  • 对于TIME数据类型的某些较旧的格式,DB2 for IBM i支持将时间值设置为24:00:00。OLE DB提供程序会将24:00:00的值转换为00:00:00,而不会出现任何错误消息或警告。
  • 通常,对于VB变体,日期值1899-12-30(即0日期)用于表示“仅时间”变体日期。午夜时间(00:00:00)用于表示“仅日期”变体日期。

评论

该自定义属性在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"

与/或

<connection>.Open "Provider=IBMDA400;Data Source=SystemA;Convert Date Time To Char=TRUE", "Userid", "Password")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AS400日期(串行格式)

来自分类Dev

在MS Access中使用ISO 8601日期

来自分类Dev

报表生成器3日期格式

来自分类Dev

SSRS:在SSRS报表查询中使用临时表

来自分类Dev

报表生成器3创建当前的30、60日期范围参数以生成报表

来自分类Dev

在JAX-RS响应中使用ISO-8601日期

来自分类Dev

在JAX-RS响应中使用ISO-8601日期

来自分类Dev

如何在HTML5日期选择器中使用if语句?

来自分类Dev

在R中使用lubridate包对同一日期字符串使用不同的结果

来自分类Dev

在与.NET中的iSeries AS400数据库的ODBC连接中使用查询参数吗?

来自分类Dev

如何在MySql中使用同一表的别名查找同一日期的多条记录(出勤)

来自分类Dev

使用moment.js验证ISO 8601日期

来自分类Dev

使用Oracle SQL生成一年日期

来自分类Dev

使用PHP更改ISO 8601日期格式

来自分类Dev

AS400 JT400获取RAM使用率

来自分类Dev

使用子报表构建SSRS报告

来自分类Dev

在使用Visual Studio 2010的Visual C#应用程序中使用现有的SSRS报表

来自分类Dev

SSRS 2008-动态参数可在Visual Studio中使用,但在报表服务器上没有可用的值

来自分类Dev

使用 bash 脚本获取给定输入日期的星期六日期

来自分类Dev

JayDeBe:将日期存储到 AS400/DB2(jt400 驱动程序)

来自分类Dev

无法在jasper报表中使用子报表创建表

来自分类Dev

是否可以使用Java从AS400返回对象列表?

来自分类Dev

使用连接在 AS400 更新上不期望“来自”

来自分类Dev

使用GNU日期从特定日期获取两周前的星期一日期

来自分类Dev

Laravel 4.2日期验证

来自分类Dev

MVC 4日期文化问题?

来自分类Dev

SQL Server 2012日期变更

来自分类Dev

ISO 8601日期时间现在

来自分类Dev

Microsoft Access 2013日期问题

Related 相关文章

热门标签

归档