我有一個表格,其中包含字符格式的日期。我想檢查日期的格式。請讓我知道我在DB2中如何做到這一點。我知道有一個函數ISDATE,但它在DB2中不起作用。我對AS400使用DB2作爲日期基地。請幫我ISDATE相當於DB2
回答
事實上,它看起來像DB2的AS/400可能不有ISDATE()
功能(我無法找到在V6R1參考什麼 - 或者,有趣的是,LUW參考)。所以你的問題似乎是該函數不存在。
問題的根源當然是試圖翻譯無效日期導致語句停止。鑑於此,如果格式可能,該聲明應該給你一個日期,如果不是,則爲空。請注意,如果你已經混美國和歐元格式/排序,你可能不能夠正確地恢復數據(如果你的分隔符是不同的,我認爲他們是在默認情況下,你可能會好起來的)。
WITH date_format(strDate, format) as (
SELECT strDate,
CASE
WHEN strDate LIKE('____-__-__') THEN 'ISO'
WHEN strDate LIKE('__.__.____') THEN 'EUR'
WHEN strDate LIKE('__/__/____') THEN 'USA'
ELSE NULL END
FROM dataTable
)
SELECT
strDate,
format,
CASE
WHEN format IS NOT NULL THEN DATE(strDate)
ELSE NULL
END AS realDate
FROM date_format
這將打開一個DataTable看起來像這樣:
String Dates
=============
2011-09-22
22.09.2011
09/22/2011
a111x90x00 -- And who knows what this is...
進入這個:
Results:
strDate format realDate
============================
2011-09-22 ISO 2011-09-22
22.09.2011 EUR 2011-09-22
09/22/2011 USA 2011-09-22
a111x90x00 - -
本例使用默認的格式,這些格式自動轉換當然是。如果你還有其他的東西,你必須手動翻譯它(而不是返回格式,你可以將它轉換爲ISO然後將其轉換爲ISO)。
使其成爲UDF將使其更容易在其他「字符日期」列上使用。 –
Clockwork-Muse答案缺少可用於驗證日期的答案。 我已經測試過它,並且在提交了諸如「2016-02-30」或「2016-04-31」之類的無效日期時會產生錯誤。邏輯只是檢查格式,這不足以呈現給CASE語句以嘗試DATE()轉換。因此,您將上述問題視爲答案取決於您希望篩選以特定方式格式化的數據,還是試圖篩選任何無效日期(格式和值)。 – geolemon
另一個答案正在討論http://stackoverflow.com/questions/37055675/validate-dates-before-conversion-aka-isdate-equivalent – Stavr00
我不清楚什麼是「檢查日期」的格式,我也不知道任何現有的ISDATE()效果,但名稱所暗示的內容似乎足夠清楚。考慮:
在v5r3上非常輕微地測試[即只有既確保了幾劣棗字符串示例值和一些垃圾文本輸入實際返回NULL,並且每個不同標準日期格式與有效的值返回的日期值],下列應該影響將輸入變化的字符串評估爲最多10個字符作爲可以轉換爲DATE的值;當輸入值不能轉換爲日期時,結果爲NULL。當然,這意味着最初的NULL值不能直接與生成的無效日期字符串的結果區分開來。
如果某些期望的指標(如TRUE
或FALSE
)被期望作爲結果,則可以使用用戶定義函數(UDF)編碼CASE表達式;例如爲:CASE WHEN ISDATE(myVCcol) IS NULL THEN 'FALSE' ELSE 'TRUE' END
DROP FUNCTION ISDATE
;
CREATE FUNCTION ISDATE
(InpDateStr VARCHAR(10)
) RETURNS DATE
LANGUAGE SQL
DETERMINISTIC
RETURNS NULL ON NULL INPUT
SET OPTION DBGVIEW = *SOURCE , DATFMT = *ISO
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN NULL ;
RETURN DATE(InpDateStr) ;
END
;
- 1. DB2中的generate_series()相當於
- 2. DB2相當於SQL的GO?
- 3. Derby相當於DB2的「NOT NULL WITH DEFAULT」
- 4. 相當於JDIC?
- 5. 相當於AWS
- 6. Android:getElementsByTagName相當於?
- 7. Linq相當於
- 8. drupalPost()相當於
- 9. 相當於SparkSQL
- 10. 相當於C#
- 11. HQL'parsename'相當於
- 12. Rails/POSTGRES ISDATE函數
- 13. Java等於()相當於PHP
- 14. WP7相當於EmptyDataTemplate?
- 15. find_by_sql相當於mongoid?
- 16. DateTime.FromOADate相當於swift
- 17. Vitamio相當於MEDIA_INFO_VIDEO_RENDERING_START
- 18. C#相當於InStrRev
- 19. .jcp相當於eclipse?
- 20. Java相當於Curl
- 21. psycopg2相當於mysqldb.escape_string?
- 22. Fortran相當於freopen
- 23. LINQ相當於Rails
- 24. .htaccess相當於baseurl?
- 25. PDO相當於odbc_tables?
- 26. JSP Post相當於
- 27. 相當於ModX塊
- 28. AF_UNIX相當於Windows
- 29. 相當於原型
- 30. Python相當於phpinfo()
既然則IsDate()是不是一個SQL函數,應該預期非DB2也沒有任何SQL數據庫管理系統的一部分。這是MS SQL Server的T-SQL函數。 _(Oracle還擁有OLAP的ISDATE程序。有可能是類似的功能在一些其他DBMS如Sybase)_給出很好的答案,就要看你想如何使用它,尤其是什麼通緝無效的日期值。 – user2338816