ISDATE相当于DB2

时间:2011-09-22 06:32:43

标签: sql db2 ibm-midrange

我有一个包含字符格式日期的表格。我想查看日期的格式。请告诉我如何在DB2中执行此操作。我知道有一个函数ISDATE但它在DB2中不起作用。我在AS400上使用db2作为日期基础..请帮帮我

2 个答案:

答案 0 :(得分:3)

实际上,看起来AS / 400的DB2可能具有ISDATE()功能(我在V6R1参考中找不到任何内容 - 或者,有趣的是,LUW参考其一)。所以你的问题似乎是该功能不存在。

问题的根源当然是尝试翻译无效日期会导致语句停止。鉴于此,如果格式化可能,此语句应该为您提供日期,如果不是格式,则为null。请注意,如果您混合了美国和欧洲格式/订单,您可能 能够正确恢复数据(如果您的分隔符不同,我认为它们默认情况下,你可能会没事的。)

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然后再转换它)。

答案 1 :(得分:2)

我不清楚“检查日期格式”的意图,我也不知道现有的ISDATE()效果是什么,但名称隐含的内容似乎足够清楚。考虑:

在v5r3上进行了极轻微的测试[即只是为了确保一些坏日期字符串示例值和一些垃圾文本输入实际返回NULL并且每个 标准 日期具有有效值的格式返回日期值],以下内容应影响最多10个字符的输入变化字符串的评估,作为可以强制转换为DATE的值;当输入值无法转换为日期时,则结果为NULL。当然,这意味着初始NULL值不能与为无效日期字符串生成的结果直接区分。

如果需要某个所需的指标,例如registerList.RegisterName(register.Name, register);TRUE作为结果,则可以在CASE表达式中编码用户定义函数(UDF)的编码;例如:FALSE

CASE WHEN ISDATE(myVCcol) IS NULL THEN 'FALSE' ELSE 'TRUE' END