我是某个数据库的自由,该数据库将日期值存储为整数(即 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 查询对象中的整个列?
如@Dan所述,有一个内置函数可以将字符串转换为时间戳表示形式。 既然你有一个 int,那么它会是这样的:
SELECT VARCHAR_FORMAT(TIMESTAMP_FORMAT(CAST(20121119 AS CHAR(8)), 'YYYYMMDD'), 'MM/DD/YYYY')
FROM SYSIBM.SYSDUMMY1
此页面可能会帮助您在 db2 中进行您不知道的解析。 将日期格式设置为字符串
编辑:哎呀,你说这是一个整数。 cast()
函数会将其转换为字符,然后您可以使用concat()
和substr()
来格式化它。
使用该函数将是我的方法。
使用现有的全局 UDF 在显示中进行转换。
这是处理此问题的正确方法。通常,不应将格式应用于数据模型(这实质上是查询结果)。显示数据时应应用格式设置。这允许您在不同上下文中显示数据时以不同的方式设置数据的格式。此外,它还提高了代码的可读性。
这里的缺点是,如果重复使用查询,我需要复制转换显示值所需的代码。
这不是缺点。您将在显示数据时设置数据的格式以进行演示。设置日期格式也不例外。
调用多次格式化数据的函数不是"代码重复"。您只是在按预期使用格式化功能。