- PR -

固定文字列とDBのint型カラムの日付加算の方法について

1
投稿者投稿内容
ふじ
会議室デビュー日: 2008/08/08
投稿数: 3
投稿日時: 2008-08-08 17:57
初めまして。
ふじと申します。
SQLServer2005を使っています。
固定文字列(1970/01/01)と、DBで保持しているint型のカラムの日付加算をして、datetime型に変換する方法について質問です。
皆様のご助力をよろしくお願いいたします。


以下の方法を試したのですが、うまく行きませんでした。
@固定文字列をCSVファイルで保持させる
フラット ファイル ソースでCSVファイルを指定して、データ変換を使ってデータベースタイムスタンプ型に変換しました。
データフローで派生列を使って、DATETIME関数にて実現できると思っているのですが、派生列のインプットが1つしか指定できないために日付加算までいたれませんでした。

A派生列で固定文字列を新しい列として追加する(データベースタイムスタンプ型)
OLE DB ソースでDBを指定し、派生列で「1970/01/01」をデータベースタイムスタンプ型で新しい列として追加しました。DATETIME関数を実行するまでにいたったのですが、1970/01/01が1905/05/23と読み込まれてしまい、加算結果が誤っていました。

B派生列で固定文字列を新しい列として追加する(文字列型)
OLE DB ソースでDBを指定し、派生列で「1970/01/01」を文字列型で新しい列として追加しました。データ変換を使ってデータベースタイムスタンプ型にしようとしたら、"データが失われる可能性があるため、値を変換できませんでした。"というエラーになってしまいました。

固定文字列の保持方法も含めて、良い方法をご教授願います。
johnes
ベテラン
会議室デビュー日: 2007/11/21
投稿数: 50
投稿日時: 2008-08-08 18:32
単純にSQLでっていう話なら
コード:
SELECT DATEADD(day, intカラム, CONVERT(DATETIME, '1970/01/01')) FROM テーブル


っていうのじゃダメですか?
ふじ
会議室デビュー日: 2008/08/08
投稿数: 3
投稿日時: 2008-08-18 10:12
johnesさん
ご回答ありがとうございます。

質問の際に書き忘れたのですが、SSISで実装しております。
その中でSQLを実行する方法が分からなかったので、以下の方法で実装してみた次第でした。
記述不足で申し訳ありません・・・

引き続きSQLを使っての方法を模索いたしますが、他に良い方法があればご教授お願いいたします。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-08-19 09:33
タイムスタンプ型を使っているのが問題では?

データ型 timestamp は単に数値を加算していくだけのもので、日付や時刻を保持する機能はありません。日付や時刻を記録するには datetime 型を使用します。
<http://msdn.microsoft.com/ja-jp/library/ms182776(SQL.90).aspx>
ふじ
会議室デビュー日: 2008/08/08
投稿数: 3
投稿日時: 2008-08-20 09:56
よっしーさん
ご回答ありがとうございます。

データベースとSSISで使用する型が混乱してしまいました。
すみませんでした。
データベースではdatetime 型、SSISのデータフロー変換(データ変換、派生列etc)ではVisual Basicのデータベースタイムスタンプ型を使用しています。

johnesさんのSQLを使用する方法として、データアクセスモードを調査しており、テーブルアクセスではなくSQLコマンドアクセスにすることで欲しい情報が取れました。
ただいまこの方法でテストを行っています。

johnesさん、よっしーさん
ご回答ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)