2016-11-29 14 views
0

私には分かりにくい特定の状況があります。SQL Serverの日付特定の形式から別の正確な日付形式への変換

私は、次の形式でDATETIMEとして保存されるSQLテーブルのフィールドを持っている:

2016-11-26 00:00:00 

これは私がdd/MM/yyyy形式でそれを必要とすることを除いて、すべてが順調に良いと-です。

CONVERT(VARCHAR(10), @dateField, 103)関数をSQLで使用したくないのは、STRING形式ではなく、DATE形式が必要なためです。

EPPlusライブラリを使用して結果DataTableをExcelにエクスポートします。この正確な形式でエクスポートの日付フィールドが必要です。

私が試した:

  • FORMAT(@dateField, 'dd/MM/yyyy', 'en-gb')だけでなく、DATE型にこのバックをキャストします。それはまだ、暗黙的に試してみて、これが正しい形式で日付に変換するためにC#を使用して
  • DATEに@dateFieldキャストVARCHARまたはNVARCHAR
  • を変換し、SMALLDATETIME
  • workSheet.Column(19).Style.Numberformat.Format = "dd/MM/yyyy";

を私の試みのどれもがDateTime型書式が機能していないので、私はこの変換のオプションが不足しています:書式設定DateTime.ParseExact(dataTable.Rows[i]["DateField"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

  • EPPlus列。私が取ったすべての道は私の価値を文字列に変換し直します。任意の支援が感謝される:)

  • +0

    なぜ、「DateTime.ParseExact」を呼び出していますか?値は既に 'DateTime'であるはずですので、それをキャストして* To *を呼び出して' ToString'を呼び出してください。特定の書式が必要な場合は、* DateTimeの値ではなく文字列を要求しています。 –

    +1

    DateTimeは** NO **形式です。これは、.NETのDateTime、bool、またはdecimalと同じように、バイナリ値です。何かを変換する必要はありません。パラメータ化されたクエリまたはORMを使用し、DateTime値をDateTimeパラメータとして渡すだけです。 EPPlusには特別なフォーマットは必要ありません.Excelの日付はOADateバイナリ形式を使用し、EPPlusはDateTimeを直接変換します。 Excelが日付を表示する方法は、混乱する可能性がある特定の列のスタイルに依存します。 –

    +0

    @JonSkeet私は定期的なParseと直接キャストを試みました。 Parseでは形式が変更されず、直接キャストによってInvalidCastExceptionがスローされました。変換を行わなくてもSQLの型を変更すると、スプレッドシートの値が数値として保存されます。私は22/03/2011を期待していますが、セルの値は40624です。( – GrammatonCleric

    答えて

    0

    日時列の場合は、日付のバイナリ表現として保存されます。管理スタジオなどのクライアントアプリケーションでレンダリングされたときにのみ、何らかの形式でレンダリングされます。

    特定の形式で必要な場合は、その形式の文字列として表示されます。データベースに保存するときは、いつでもdatetimeに変換することができます(また、!)。たとえば、保存する前にdatetimeから時間部分をトリムすることができます。

    +0

    ただし、サードパーティ製のシステムであり、特定の方法でデータをデータベースに投稿できるようにコードを変更する権限がありません – GrammatonCleric

    +0

    私が誤解しているが、Sqlサーバーは日付を表す数字としてdatetimeにデータを格納します。フォーマットはデータを調べたり表示したりする際に重要です。もちろん挿入/更新するときに重要です。 Sql Serverに明白な形式(2016年11月29日など)を使用することが常にベストですが、サードパーティのシステムがあなたがそれを与える形式で動作するなら、あなたはOKであるはずですか? –

    +0

    @GrammatonClericは、ほとんどの場合、ExcelのSQL書式の問題の日付を表示する方法を混乱させる可能性があります。なにもない。 Excelの日付は常に*小数点以下の桁数(日付オフセット+時間小数点)として格納されます。これは、選択した数値書式によって異なる方法で表示されます。それらのうちのいくつかは "ローカル"形式とみなされ、異なるロケールの形式が異なります –