2012-12-10 73 views
0

有没有办法修剪DB2日期函数中的时间戳记?修改DB2中的时间戳记的日期函数

有DB2选择语句,我从数据库中选择日期并将其保存到变量中。然后,我使用该变量作为另一个db2 select的参数,通过向它添加30天,但我不认为它与它添加到结尾的时间戳一致。

Select business_date From DB2INST1.BusDate Where key = 0 

没有在数据库中为这个日期没有时间戳,但其加入'12:00:00AM”到最后

它保存这个选择到一个变量,我用它在另一个选择这里

where expirdate > (DATE(@BusDate) + 30 DAYS) 

我得到这个错误:

{"ERROR [428F5] [IBM][DB2/AIX64] SQL0245N The invocation of routine \"DATE\" is ambiguous. The argument in position \"1\" does not have a best fit."} System.Exception {IBM.Data.DB2.DB2Exception}

+0

这听起来像是一个潜在的应用层问题。您使用什么其他语言/框架来访问SQL?主机变量的类型是什么?你至少似乎有适当的时间,但'格式'呢? –

+0

应用程序位于使用.NET 2.0 Framework的Visual Studio 2008中DB2 Version 9.7 – 2012-12-11 20:22:02

+0

第一条SELECT语句和第二条SELECT语句是否属于同一存储过程?您是否将结果日期存储在任何.Net变量中? – Lijo

回答

1

尝试

where expirdate > DATE(@BusDate + 30 DAYS) 
+0

不能说他的版本,但在我的DB2实例(V6R1)上,如果'@ BusDate'是任何东西,但是日期/时间戳类型,则失败。使用DATE()意味着主变量实际上不是'日期'类型 - 并且您想确保先将其转换为_anyways_,以避免像夏令时这样的含糊之处。 –

+1

该应用程序在Visual Studio 2008中使用.NET 2.0 Framework DB2版本9.7。我知道@BusDate是12/12/2012 12:00:00 AM格式的日期时间戳。当我测试时,我可以手动输入日期但没有时间戳,它可以工作,但是当它实际从DB2数据库中提取当前日期时,它会添加时间戳12:00:00 AM,并使其失败。 – 2012-12-11 20:23:59

1

选择的业务日期为VARCHAR /串

Select varchar_format(business_date,'YYYY-MM-DD') 

然后做到这一点以后使用它,将其转换为一个日期,然后使用一个日期函数添加30天它:

 (DATE(to_date(@BusDate, 'YYYY-MM-DD') + 30 DAYS)) 
0

第一个SELECT语句和同一个存储过程的第二个SELECT语句部分是什么?您是否将结果日期存储在任何.Net变量中?如果您将它存储在.Net DateTime变量中,我的建议是在.Net代码本身中执行date addition操作。然后在传递到数据库之前从变量中删除时间部分。

在此也看看:Datetime field overflow with IBM Data Server Client v9.7fp5

如果这两个SELECT语句是一个存储过程的一部分,并没有invloved没有净DateTime的变量,那么它是一个不同的故事。