1

IBM iSeries サーバーから MSSQL 2008 R2 データベースにデータをインポートするプログラムに取り組んでいます。残念なことに、一部の開発者はかなり前に日付を 10 進数として格納することを決定し、日付の格納に使用されている CYYMMDD 形式を実質的に破っています。

たとえば、その形式では、1995 年 8 月 1 日は 0950801 として保存されます。しかし、実際にデータベースに保存されているのは 95081 であり、これを System.DateTime に変換しようとすると、明らかに例外がスローされます。

先頭の 0 が欠けているという単純な問題であれば、文字列を変換する前に簡単にそれを文字列に追加できます。しかし、3 桁か 4 桁しかない日付がいくつか (実際には数千) あります。たとえば、1128 として保存されている日付があります。それに先頭の 3 つの 0 を付けて変換すると、明らかに間違った日付が生成されます。

それで、これらの日付を解析する信頼できる方法を知っている人はいますか? SQL select ステートメントを直接使用するか、C# で何らかの操作を行いますか? それとも、そもそも 3 桁と 4 桁の日付が正しく入力されていないと仮定して、そのような日付を破棄するだけですか?

4

3 に答える 3

0

テーブルを挿入/更新するプログラム(特に変更コメント[存在すると仮定])を確認することをお勧めします(これについてはDB2にクエリを実行します)。変更コメントは、日付形式が変更されたかどうか(例: Y2K ) とその理由を教えてくれることを願っています。

また、 DBを読み取るプログラムを見ると、 Date を処理する特別なコードがあるかもしれません。日付形式を決定するコードがある場合があります。

95081 は序数の日付 (YYDDD)の場合もあり、DDD は年間通算日です。Ordinal または Julian-Dateを参照してください。これらの日付は、ある段階で人気があります。

DB-Field は元々、Century のないYYMMDDだったと思います。2000 年版では、おそらく CYYMMDD にフォーマットが変更されました。1128 (および 221) のような日付は、おそらく YYMMDD の日付であり、2000 年の変更の前に作成された日付 (または元の 2000 年の実装で欠落し、後で変更された場所) が変更されます。

于 2013-05-07T23:44:57.363 に答える