1

ColdFusion 10 をローカルで実行していますが、最近 Oracle から MSSQL に変換されたデータベースで 2 つの問題が発生しています。

私がやろうとしているのは、cfspreadsheet を使用して、データベースからスプレッドシートにデータを出力することです。テーブルには 3 つの列があり、これらには日付/タイムスタンプが含まれています。

問題 #1: コードは変換前は正常に機能していましたが、変換後はすべての日付/タイム スタンプが科学表記形式で表示されます。キャスト変換を使用して CFQUERY を変更しようとしましたが、日付/タイムスタンプ フィールドが「MM/DD/YYYY HH:MM AM/PM」の代わりに「YYYY/MM/DD」として表示されるだけです。 .' Excel でセルをダブルクリックすると、正しい書式が表示されますが、デフォルトでは「YYYY/MM/DD」と表示されます。ここに何か提案はありますか?

問題 #2: 指定した日付/時刻の書式設定を使用するはずの列または特定のセルが空または null の場合、「'' は無効な日付または時刻の文字列です」というエラーが表示されます。

cfquery で CAST/CONVERT に使用しているものは次のとおりです。

            ,CAST(CONVERT(varchar(20), GYMSTARTDATE, 22) AS datetime) AS GymStartDateTime
        ,CAST(CONVERT(varchar(20), GYMENDDATE, 22) AS datetime) AS GymEndDateTime
4

2 に答える 2

1

データ サンプルと実際のコードを見ずに言うのは難しいです。ただし、CF10 と SQL Server 2005 で説明された問題を再現しようとしましたが、できませんでした。指数表記ではなく、文字列として表示されるすべての値。

データまたは環境に、私たちが認識していない何か違うものがあるようです。問題を再現する小さな例をまとめてください。さらにデバッグできます。

テスト 1:

<!--- raw dates --->
<cfquery name="qry" datasource="#dsn#">
    SELECT  StartDate, EndDate
    FROM    YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test.xls" 
      query="qry" 
      overwrite="true" /> 

結果 1: (細胞の種類: 一般)

STARTDATE                   ENDDATE
2013-08-20 14:19:28.907     2013-09-03 14:19:28.907
2013-08-25 14:19:30.293     2013-09-03 02:19:30.293

テスト 2:

<!--- convert / datetime --->
<cfquery name="qry" datasource="#dsn#">
SELECT CAST(CONVERT(varchar(20), StartDate, 22) AS datetime) AS GymStartDateTime
          , CAST(CONVERT(varchar(20), EndDate, 22) AS datetime) AS GymEndDateTime
FROM   YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test2.xls" 
      query="qry"  
      overwrite="true" /> 

結果 2: (細胞の種類: 一般)

GYMSTARTDATETIME            GYMENDDATETIME
2013-08-20 14:19:28.0       2013-09-03 14:19:28.0
2013-08-25 14:19:30.0       2013-09-03 02:19:30.0

テスト 3:

<!--- convert / string --->
<cfquery name="qry" datasource="#dsn#">
SELECT  CONVERT(varchar(20), StartDate, 22) AS GymStartDateTime
           , CONVERT(varchar(20), EndDate, 22) AS GymEndDateTime
FROM   YourTable
</cfquery>

<cfspreadsheet action="write" 
      filename="c:/test3.xls" 
      query="qry" 
      overwrite="true" /> 

結果 3: (細胞の種類: 一般)

GYMSTARTDATETIME            GYMENDDATETIME
08/20/13  2:19:28 PM        09/03/13  2:19:28 PM
08/25/13  2:19:30 PM        09/03/13  2:19:30 AM
于 2013-09-04T21:55:30.493 に答える
1

あなたがそれを理解したら、私に知らせてください。これは、2011 年に公開されたサンプル コードへのリンクです。ColdFusion 9 または 10 では動作しません。公式の「組み込み」(サポートされていない) 日付形式もすべてリストしました。

http://pastebin.com/aQnembR3

<cfset q = queryNew("Name,Date", "varchar,date")>
<cfloop index="x" from="1" to="10">
    <cfset queryAddRow(q)>
    <cfset querySetCell(q, "Name", "Name #x#")>
    <cfset querySetCell(q, "Date", now())>
</cfloop>

<cfset dfStyle = {dataformat = "m/d/yy h:mm"}>

<cfset o = spreadsheetNew('dateTest', true)>
<cfset spreadsheetAddRows(o, q)>
<cfset spreadsheetFormatColumn(o, dfStyle, 2)>

<cfset bin = spreadsheetReadBinary(o)>

<cfheader name="Content-Disposition" value="attachment; filename=dateTest_#dateFormat(now(), 'ddmmmyyyy')#.xlsx">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#bin#" reset="true">
于 2013-09-04T20:31:27.113 に答える