私には分かりにくい特定の状況があります。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);
なぜ、「DateTime.ParseExact」を呼び出していますか?値は既に 'DateTime'であるはずですので、それをキャストして* To *を呼び出して' ToString'を呼び出してください。特定の書式が必要な場合は、* DateTimeの値ではなく文字列を要求しています。 –
DateTimeは** NO **形式です。これは、.NETのDateTime、bool、またはdecimalと同じように、バイナリ値です。何かを変換する必要はありません。パラメータ化されたクエリまたはORMを使用し、DateTime値をDateTimeパラメータとして渡すだけです。 EPPlusには特別なフォーマットは必要ありません.Excelの日付はOADateバイナリ形式を使用し、EPPlusはDateTimeを直接変換します。 Excelが日付を表示する方法は、混乱する可能性がある特定の列のスタイルに依存します。 –
@JonSkeet私は定期的なParseと直接キャストを試みました。 Parseでは形式が変更されず、直接キャストによってInvalidCastExceptionがスローされました。変換を行わなくてもSQLの型を変更すると、スプレッドシートの値が数値として保存されます。私は22/03/2011を期待していますが、セルの値は40624です。( – GrammatonCleric