2012-02-27 15 views
0

私はAdobe Coldfusion 9.0.1とMicrosoft SQL Server 2008 R2を使用しており、2008 Expressで以下を確認しています。私はJOINとColdFusionの独自のSerializeJson関数を使用してJavaScript変数に結果をシリアル化する2つのテーブルがあります。ColdFusionのSerializeJSONとMS SQL 2008の互換性がありません

CREATE TABLE [dbo].[event](
[id] [int] IDENTITY(1,1) NOT NULL, 
[date1] [date] NULL, 
[date2] [datetime] NULL, 
[date3] [datetime2](7) NULL, 
[status] [nchar](10) NULL 
); 

CREATE TABLE [dbo].[status](
[id] [int] IDENTITY(1,1) NOT NULL, 
[text] [nvarchar](max) NULL, 
); 

私の最初のcfqueryが

<cfquery name="qryprod" datasource="mssqlexpress"> 
    SELECT e.id, date1, date2, date3 
    FROM event e 
    inner join status s 
    on e.status = s.id 
    WHERE e.id = <cfqueryparam cfsqltype="cf_sql_numeric" value="2"> 
</cfquery> 
#SerializeJson(qryprod, true)# 

のように見えるすべての3つの日付は次のようにシリアライズさ:Februar, 27 2012 22:10:12 - ドイツ語MONTHNAMES。

私の2番目のクエリ:タイプdatetime2012-02-27

  • date2のタイプdatetime2Februar, 27 2012 22:10:12
  • date3が2012-02-27 22:10:12.4400000
  • のように見えるにシリアル化されるにタイプ date

    <cfquery name="qryprod" datasource="mssqlexpress"> 
        WITH subStatus AS (
         SELECt id, text 
         FROM status 
        ) 
        SELECT e.id, date1, date2, date3 
        FROM event e 
        inner join subStatus s 
        on  e.status = s.id 
        WHERE e.id = <cfqueryparam cfsqltype="cf_sql_numeric" value="2"> 
    </cfquery> 
    #SerializeJson(qryprod, true)# 
    
    • 日付1は、直列化され

      どのように起こるのですか?常に私の日付をフォームMonthname, day yearで取得するためには何が必要ですか?

      ベスト、 ベルンハルト

    +0

    あなたは、これがResultSetMetaDataのを見ることで起こって、およびタイプは、ColdFusionに返す列を引き上げている理由を把握することができるかもしれません。 – Mark

    +0

    返事をありがとう。実際の人の誰かがJDBCドライバをチェックすることを勧めました。マイクロソフトでは、現在のアップデートで 'date'、' datetime2'と 'DATETIMEOFFSET'を使って何かを修正した情報を提供しています:http://www.microsoft.com/download/en/details.aspx?id=28562 Coldfusionで提供されていたもので、当初期待したとおりに動作しました。 –

    +0

    Coldfuin 10のベータ版で提供されているJDBCドライバは、期待される結果を提供します。ちょうどそれを試した。 –

    答えて

    0

    おそらく、クエリの結果をループする必要があり、手動で文字列に日付の値を変更します。これを行うにはParseDateTimeDateFormat(またはそのローカライズ版、LSParseDateTimeLSDateFormat)を使用できます。

    +0

    返事をありがとう。 CFQUERY-ResultにgetMetadate.getColumntypeを使用しました。間違った形式で返された日付の場合は、varcharが返されました。 –

    +0

    @Bardwareなぜデータベースの日付に3つの異なる表現を使用していますか?なぜただ一つに落ち着かないの? –

    +0

    私は3つの表現を使って違いを示しました。私の2008年のR "データベースでは、私のすべての日付列は' datetime2'型です。datetime2が間違って直列化されていて、他の型とどのように動作するかを見たいと思っていました。 –

    0

    T-SQL CONVERT関数を見てください。

    SELECT e.id, CONVERT(varchar(15), date1, 107) AS date1... 
    

    上記のフォーマットコードは、mon dd、yyyyフォーマットを返します。

    あなたは完全な月名をしたい場合は、日付関数を使用することができます。

    SELECT e.id, 
    (
    DATENAME(month, date1) + ' ' + 
    CAST(DATEPART(d, date1) AS varchar(2)) + ', ' + 
    CAST(DATEPART(yyyy, date1) AS varchar(4)) 
    ) AS date1 
    ... 
    
    +0

    これは可能です。 –

    関連する問題