web-dev-qa-db-ja.com

DateTimeからINTに変換する

私の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
9
Raj More

編集: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
16
Steve Mayne

dATEDIFF(dd、'12/30/1899 '、mydatefield)を選択します

10
Joel Coehoorn

または、SSISに既に含まれている場合は、次のようにして(いくつかのデータフロータスクの一部として)派生列を作成できます。

(DT_I8)FLOOR((DT_R8)systemDateTime)

しかし、ダブルチェックするためにテストする必要があります。

0
Michael J Swart