我在某個數據庫的自由,它將日期值存儲爲整數(即20121119
)。我有幾個查詢爲報告顯示檢索這些值,所以我需要將這些值轉換爲m/d/yyyy
格式。有沒有一種快速的方法來重新格式化ColdFusion查詢列中的所有值?
我看到幾個方法可以做到這一點:
- 做轉換的顯示,使用現有的全球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查詢對象中的整個列?
這工作很好。但是,如果列中有任何無效值 - 即20100230,該怎麼辦?這是一個有效的整數,但不能轉換爲日期。我得到'[SQL0181]值日期,時間,時間戳字符串無效.'錯誤。 –
唯一的另外一個問題是它創建了一個TIMESTAMP值,然後我仍然需要格式化爲'm/d/yyyy'。 –
還有另一個函數,['VARCHAR_FORMAT()'](http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fdb2%2Frbafzscavarcharformat.htm),它將從時間戳到您選擇的字符表示(更新示例) – bhamby