0

私は、日付値を整数(つまり20121119)として格納する特定のデータベースを自由に使用できます。レポート表示のためにこれらの値を取得するクエリがいくつかあるので、これらの値をm/d/yyyyフォーマットに変換する必要があります。

これを行うにはいくつかの方法があります。

  • 既存のグローバルUDFを使用して、ディスプレイで変換を実行します。ここでの欠点は、クエリを再利用する場合、表示値を変換するために必要なコードを複製する必要があることです。
  • SQLの値を解析して、適切にフォーマットされた値を返します。私はDB2/iSeriesから読んでいますが、これには(私が見つけた限りでは)このための組み込み関数がありません。
  • 結果セットをループし、各値を一度に1つずつ変換します。これは私が現在行っていることですが、より大きなデータセットの場合、パフォーマンスが問題になります。

    <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 に答える