私のSSISパッケージでは、DateTimeから対応するINTEGER値に値を変換する必要があります。次のサンプルが提供されています。
これらを変換する方法に関するアイデアはありますか?
DATETIME INT
--------- ----
1/1/2009 39814
2/1/2009 39845
3/1/2009 39873
4/1/2009 39904
5/1/2009 39934
6/1/2009 39965
7/1/2009 39995
8/1/2009 40026
9/1/2009 40057
10/1/2009 40087
11/1/2009 40118
12/1/2009 40148
1/1/2010 40179
2/1/2010 40210
3/1/2010 40238
4/1/2010 40269
5/1/2010 40299
6/1/2010 40330
編集:float/intへのキャストは、最近のバージョンのSQL Serverでは機能しなくなりました。代わりに以下を使用してください。
select datediff(day, '1899-12-30T00:00:00', my_date_field)
from mytable
サーバーの地域設定の影響を受けないように、文字列dateは あいまいでない日付形式 である必要があります。
SQL Serverの古いバージョンでは、floatにキャストしてからintにキャストすることで、DateTimeからIntegerに変換できます。
select cast(cast(my_date_field as float) as int)
from mytable
(注:正午を過ぎるとMSSQLが値を切り上げるため、intに直接キャストすることはできません!)
データにオフセットがある場合、これを結果から明らかに加算または減算できます
まっすぐ後ろにキャストすることで、別の方向に変換できます。
select cast(my_integer_date as datetime)
from mytable
dATEDIFF(dd、'12/30/1899 '、mydatefield)を選択します
または、SSISに既に含まれている場合は、次のようにして(いくつかのデータフロータスクの一部として)派生列を作成できます。
(DT_I8)FLOOR((DT_R8)systemDateTime)
しかし、ダブルチェックするためにテストする必要があります。