0

SSIS 派生列変換を使用して、百年日付 (HYD) 形式を通常の日付形式に変換しようとしています。例: 41429 を 06/04/2013 に変換します。私はスクリプト内のコードをフォーマットすることでそれを行うことができます (そしておそらく私は単にこのルートに行かなければなりません) が、取得していない派生列内でそうする方法が必要だと感じています. どんな助けでも大歓迎です。

4

3 に答える 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 に答える