2012-12-10 114 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的變量,那麼它是一個不同的故事。