我处于某个数据库的自由,它将日期值存储为整数(即20121119
)。我有几个查询检索报告显示的这些值,因此我需要将这些值转换为m/d/yyyy
格式。
我看到了几种方法:
循环结果集并一次转换一个值。这就是我目前正在做的事情,但是对于更大的数据集,性能是一个问题:
<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查询对象中的整个列?
答案 0 :(得分:4)
如@Dan所述,有a built-in function将字符串转换为时间戳表示。因为你有一个int,所以它会是这样的:
SELECT VARCHAR_FORMAT(TIMESTAMP_FORMAT(CAST(20121119 AS CHAR(8)), 'YYYYMMDD'), 'MM/DD/YYYY')
FROM SYSIBM.SYSDUMMY1
答案 1 :(得分:2)
此页面可能会帮助您在db2中解析您不知道的内容。 Format date to string
编辑:哎呀,你说它是一个整数。 cast()
函数会将其转换为字符,然后您可以使用concat()
和substr()
对其进行格式化。
使用该功能将是我的方法。
答案 2 :(得分:1)
使用现有的全局UDF在显示中进行转换。
这是处理此问题的正确方法。通常,格式不应该应用于数据模型(这基本上是您的查询结果)。显示数据时应应用格式。这允许您在不同的上下文中显示时以不同方式格式化数据。此外,它还提高了代码的可读性。
这里的缺点是,如果重新使用查询,我需要复制转换显示值所需的代码。
这不是缺点。您将在显示数据时格式化数据以进行演示。格式化日期也不例外。
调用多次格式化数据的函数不是“代码重复”。您只是使用了打算使用的格式化功能。