2013-02-07 81 views
0

我需要執行選擇,其中我的lpdt7是在今天的7天之內。 以下代碼返回:「日期,時間或時間戳字符串中的值無效。」帶日期的日期數學

SELECT lnmast.sname, 
     lnmast.status, 
     ddmast.acctno, 
     ddmast.status, 
     date(digits(lpdt7)) AS closed 
FROM mydat.lnmast lnmast 
LEFT OUTER JOIN mydat.ddmast ddmast ON lnmast.cifno = ddmast.cifno 
AND lnmast.altadd = ddmast.altadd 
WHERE lnmast.status = 2 
    AND date(digits(lpdt7)) >= curdate() -7 days 
+0

只是在做任何順藤摸瓜對於這個問題之前,讓你看着[IBM的SQL錯誤(http://www-01.ibm.com/support/docview.wss?uid=swg21349843) – MrSimpleMind

+1

'lpdt7'中日期的格式是什麼? – jamesallman

+0

@JamesA Decimal,7 – macunte

回答

0

我的錯誤傢伙。我必須先在日期字段中捕獲空值。

WHERE lnmast.status = 2 and lpdt7 > 1 and date(digits(lpdt7)) >= curdate() - 7 days 
+0

感謝分享,現在你可以檢查你的答案爲正確的:) –

0

我認爲日期函數不喜歡日期十進制(數字(lpdt7)),並造成錯誤,你看到工作。 假設您的小數日期爲YYYYMMDD格式。你可以像這樣轉換它。

DATE (SUBSTR (DIGITS (lpdt7) , 1 , 4) || '-' || 
     SUBSTR (DIGITS (lpdt7) , 5 , 2) || '-' || 
     SUBSTR (DIGITS (lpdt7) , 7 , 2)) 

我使用的不是CHAR DIGITS,因爲它不抑制0 最好是在你的系統創建日期轉換功能 - SQL代碼將看起來清爽多了。這個答案取自我們現場系統中使用的日期函數的一部分。

+0

我的數據是格式yyyyddd – macunte