ExcelからSQL Serverにデータをインポートする際に問題が発生します。宛先表にインポートされるdatetime
の値は、Excelソースファイルのdatetime
の値とは異なります。SQL Server 2012にインポートするとExcelの日時の値が予期せず変更される
フォーマットの有無にかかわらず、値は常にExcelの実際の時間よりも0.003ミリ秒少なくなります。これにより、GROUP BY時間にしようとすると、午前1時にマークするべき値が午前12時にマークされます。
正確な値を確認するには、サンプルクエリ&の結果に注目してください。
誰かが私にこれがなぜ起こっているのか、私の期待される結果を得る方法を教えてもらえれば、それは非常に感謝しています。
これを解決するには、追加の手順を踏まずに解決したいと思います。 Excelで(ノーステージング表は、してください)
SELECT
Timestamp,
CAST(Timestamp AS DATE) Date,
CAST(Timestamp AS DATETIME) Datetime,
CAST(Timestamp AS DATETIME2) Datetime2,
CAST(Timestamp AS TIME) Time
FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml;HDR=Yes;
Database=\\server\share\160322.xlsx;',
'SELECT * FROM [160322$]')
/* Query Results (ALL WRONG):
Timestamp : 2016-03-22 00:59:59.997 -- Imported Value without formatting
Date : 2016-03-22 -- Formatted Values
Datetime : 2016-03-22 00:59:59.997
Datetime2 : 2016-03-22 00:59:59.9970000
Time : 00:59:59.9970000
*/
値:
3/22/2016 12:15:00 AM
値SQL Serverテーブル内:
2016-03-22 00:14:59.997
予想されるSQL Serverの値:
2016-03-22 00:15:00.000
値Excelの場合:
3/22/2016 01:00:00 AM
SQL Serverテーブルの値:
2016-03-22 00:59:59.997
予想されるSQL Serverの値:
2016-03-22 01:00:00.000
その問題を解決する必要があり、marc_s、ありがとうございました。 DATETIME2(3)は依然として.997ミリ秒を返しましたが、DATETIME2(1)とDATETIME2(2)の両方が期待値を返しました! – Archias