SSIS 派生列変換を使用して、百年日付 (HYD) 形式を通常の日付形式に変換しようとしています。例: 41429 を 06/04/2013 に変換します。私はスクリプト内のコードをフォーマットすることでそれを行うことができます (そしておそらく私は単にこのルートに行かなければなりません) が、取得していない派生列内でそうする方法が必要だと感じています. どんな助けでも大歓迎です。
質問する
3051 次
3 に答える
1
これが私が思いついたものです。あなたの変換は正しいですか?私の答えは1日です。オフ。
DECLARE @t1 as date = '01/01/1900';
DECLARE @t2 as DATE = '12/31/1900';
DECLARE @hyd as INT;
-- この例は、1 SELECT @hyd = DATEDIFF (d, @t1, @t2) + 1 を追加する必要があることを示しています -- 364 + 1 SELECT @hyd
set @t2 = '06/04/2013';
SELECT @hyd = DATEDIFF (d,@t1, '06/04/2013') + 1-- 41427
SELECT @hyd
SELECT DATEADD (d, @hyd, '01-JAN-1900')
SELECT DATEADD (d, 41429, '01-JAN-1900')
于 2013-06-04T22:19:02.117 に答える
0
100 年の日付は、1899 年 12 月 31 日からの日数に基づいて計算されます。それは「エクセルの事」です。また、説明が必要なバグもあります。
同等の TSQL ロジックは次のようになります。
DECLARE
@HYD int = 41429;
SELECT
@HYD =
CASE
WHEN @HYD > 60
THEN @HYD -1
ELSE
@HYD
END;
SELECT
DATEADD(d, @HYD, '1899-12-31') AS HYD;
その数式を使用して、派生列変換で次の式を記述できます ( という名前の列があると仮定しますHYD
)
(HYD > 60) ? DATEADD("d",HYD - 1,(DT_DATE)"1899-12-31") : DATEADD("d",HYD,(DT_DATE)"1899-12-31")
そして結果
于 2013-06-05T18:40:20.223 に答える
0
--or inline SQL...using this
SELECT
case when ([HYD] > 60) then
DATEADD(day,[HYD] - 1,'1899-12-31')
else
DATEADD(day,[HYD],'1899-12-31')
end 'HYD_conv'
FROM
TableName
--and in the where clause if you like...
WHERE
(case when ([HYD] > 60) then DATEADD(day,[HYD] - 1,'1899-12-31') else DATEADD(day,[HYD],'1899-12-31') end) = '2016-01-14'
于 2016-02-04T01:23:19.647 に答える