0

我可以随意使用某个数据库,它将日期值存储为整数(即20121119​​)。我有几个查询可以检索这些值以进行报告显示,因此我需要将这些值转换为m/d/yyyy格式。

我看到了几种方法来做到这一点:

  • 使用现有的全局 UDF 在显示中进行转换。这里的缺点是,如果重新使用查询,我需要复制转换显示值所需的代码。
  • 解析 SQL 中的值以返回格式正确的值。我正在阅读 DB2/iSeries,它没有(据我发现)为此提供内置函数。
  • 循环遍历结果集并一次转换每个值。这是我目前正在做的事情,但是对于更大的数据集,性能是一个问题:

    <cfscript>
        var i = 1;
        var _query = ARGUMENTS.query;
    
        if  (   !Len(Trim(ARGUMENTS.column))
            ||  !ListFindNoCase(_query.ColumnList, ARGUMENTS.column))
            return _query;
    
        for (i=1; i<=_query.RecordCount; i++) {
            _query[ARGUMENTS.column][i] =
                VARIABLES.Library.DateTime.ParseAS400Date(
                    _query[ARGUMENTS.column][i]
                    );
        }
    
        return _query;
    </cfscript>
    

是否有一种简单/快速的方法可以将格式化函数应用于 ColdFusion 查询对象中的整个列?

4

3 回答 3

4

正如@Dan 所指出的,有一个内置函数可以将字符串转换为时间戳表示。既然你有一个 int,那么它会是这样的:

SELECT VARCHAR_FORMAT(TIMESTAMP_FORMAT(CAST(20121119 AS CHAR(8)), 'YYYYMMDD'), 'MM/DD/YYYY')
FROM SYSIBM.SYSDUMMY1
于 2012-11-19T23:10:59.793 回答
2

这个页面可能会帮助您在您不知道的 db2 中进行解析。 将日期格式化为字符串

编辑:哎呀,你说它是一个整数。该cast()函数会将其转换为字符,然后您可以使用concat()substr()格式化它。

使用该功能将是我的方法。

于 2012-11-19T20:49:03.727 回答
1

使用现有的全局 UDF 在显示中进行转换。

这是处理这个问题的正确方法。通常,格式不应该应用于数据模型(本质上是您的查询结果)。显示数据时应应用格式。这允许您在数据显示在不同的上下文中时以不同的方式格式化数据。此外,它还提高了代码的可读性。

这里的缺点是,如果重新使用查询,我需要复制转换显示值所需的代码。

这不是缺点。您将在显示数据的任何时候格式化数据以进行演示。格式化日期也不例外。

调用多次格式化数据的函数不是“代码重复”。您只是按照预期使用的格式使用格式化功能。

于 2012-11-20T19:43:33.010 回答