1

SQL Server で Visual Studio を使用してデータをインポートする際に厄介な問題があります。Excel ファイル (.xlsx) をインポートするために、Visual Studio で SSIS インポート パッケージを作成しました。インポートしたシートには、日付型の値が入力された列があります。一部の値は左揃えで、一部は右揃えです。列全体を日付型としてフォーマットすると、その列で 2 つの異なるタイプの配置が得られます。たとえば、2011 年 4 月 1 日は右揃え、2011 年 13 月 1 日は左揃えです。その列の nvarchar を含むファイルをインポートすると、左揃えの値に NULL 値が返されます。その列の日時データ型でファイルをインポートすると、右揃えの NULL 値が得られます。

nvarchar または datetime のいずれかとして、情報がどのように Sql データベースに「着陸」するかは気にしませんが、NULL を含まない完全な情報が必要です。これは主に Excel の問題のようです。Excel では値が同じデータ型であると認識されないため、さまざまな種類の配置が行われます。何か提案はありますか?アドバイス/提案に感謝します。ありがとうございました。

4

1 に答える 1

1

ここで2つの問題があると思います。1つは、右揃えの値は日付として解釈されますが、Excelがそれらをm / d / yyyyと見なし、d / m / yyyyが必要なため、間違っています。2つ目は、左揃えの値がテキストとして解釈されることです。

残念ながら、データがすでに存在するときに列にフォーマットを適用しても、基になるストレージは変更されません。Excelはすでにデータを文字化けしているため、正しい値を自分で解析する必要があります。

上記の各問題には、異なる解決策が必要です。これは、問題とそれに対応する修正をどのように分類したかを示すビジュアルです。

ここに画像の説明を入力してください

まず、で説明されている日付の書式設定に注意してくださいcolumns A, D, E, F。これは、2011年4月1日の「修正済み」バージョンがソースと同じように見える理由を説明しています。実際、修正バージョンは1月4日ですが、ソースは4月1日です。

フローと式は次のとおりです。

列BとCはヘルパーです。これらは、の修正を単純化するために望ましいものcolumn Dです。ここでのエラーは重要ではありません。それらは最終ステップで無視されます:

B3: =FIND("/",A3)
C3: =FIND("/",A3,B3+1)

列Dは、数字がスラッシュの中にある場所を解析し、日付値を作成することにより、テキストとして解釈されるデータを処理します。これは必要ありませんが、わかりやすくするために示しています。

D3: =DATE(RIGHT(A3,4),MID(A3,B3+1,C3-B3-1),LEFT(A3,B3-1))

列Eは、日付として解釈されるデータで機能しますが、dとmが逆になっています。繰り返しますが、必要ありませんが、明確にするために示しています。

E3: =DATE(YEAR(A3),DAY(A3),MONTH(A3))

IF列Fは、適切な修正を適用するためにDとEをまとめます。

F3: =IF(ISERROR(VALUE(A3)),DATE(RIGHT(A3,4),MID(A3,B3+1,C3-B3-1),LEFT(A3,B3-1)),DATE(YEAR(A3),DAY(A3),MONTH(A3)))
于 2012-07-28T23:36:21.083 に答える