2016-07-28 5 views
-1

私は24時間形式であるために時間が必要な複数のdatetimeフィールドを持っています。派生カラムssisで24時間形式でdatetimeを変換する

間隔開始時刻 2016年1月4日03.30

私は 2016年1月4日15.30

その

として間隔開始時刻を必要とする私は、SSISでの派生列にこのコードを開発しました。しかし、私はこれが正しいとは思わない:

(DATEPART("Hh",[Interval Start Time]) == 01 ? "13" : 
    (DATEPART("Hh",[Interval Start Time]) == 02 ? "14" : 
     (DATEPART("Hh",[Interval Start Time]) == 03 ? "15" : 
      (DATEPART("Hh",[Interval Start Time]) == 04 ? "16" : 
      (DATEPART("Hh",[Interval Start Time]) == 05 ? "17" : 
       ""))))) 

私は助けていただきありがとうございます。

+0

実際の3AMと3PMはどのように区別されますか? –

+0

サービスは午前9時から午後5時30分まで運行されますので、午前3時にはサービスはありませんので、03.30は15.30になります。ありがとう – Djbril

答えて

0

だけCONVERTを使用します。

SELECT CONVERT(char(16), [Interval Start Time], 120) 

あなたの代わりにコロン(:)のドット(.)区切りの時間を持ちたい場合は、あなたがREPLACEを追加することができます。

SELECT REPLACE(CONVERT(char(16), [Interval Start Time], 120), ':', '.') 

ところで、 Datetime data type doesn't store display format.

+0

@ Zoharあなたが提供した答え:SELECT CONVERT(char(16)、[Interval Start Time]、120)は機能しません。私はまだ13.30を得るべきである01:30の時間を得る。 – Djbril

+0

本当ですか? [このオンラインデモをチェックしてください。](http://rextester.com/VKLN35066) –

0

各datetimeに12時間を追加する必要があるようです。たとえば

DATEADD(HOUR, 12, [Interval Start Time]) 

それとも、あなたは条件付きで追加を適用することができ、あなたの質問にロジックを複製する:

CASE WHEN DATEPART(HOUR, [Interval Start Time]) <= 5 THEN [Interval Start Time] ELSE DATEADD(HOUR, 12, [Interval Start Time]) END 
+0

午後12時までに間違った結果が出るでしょう... –

+0

@Chrisこれはうまくいきません。私はまだ13時30分になるはずです。ありがとう – Djbril

0

あなたは24時間形式に日時を変換しようとしているなら、あなたは以下のクエリを試すことができます。

select CONVERT(VARCHAR(24),getdate(),121); 
Or 
select CONVERT(datetime,getdate(),121); 

OUTPUT : 2016-07-28 20:14:10.937 
+0

1. 'varchar'の代わりに固定長の文字列に' char'を使います。 2.問題の時間分解能は数分であり、時間分解能はミリ秒で表示されません。 3. 2番目のステートメントは 'datetime'を' datetime'に変換します。私はそれを 'varchar'に変換するつもりだと思っています... –

+0

SSISの派生列でこれをやりたかったのです。 – Djbril

0

これを試してみてください。

(DT_WSTR,4)YEAR([Interval Start Time])+"-"+ 
RIGHT("0" + (DT_WSTR,2) MONTH([Interval Start Time]),2)+ "-"+ 
RIGHT("0" + (DT_WSTR,2) DAY([Interval Start Time]),2) +" "+ 
(datepart("hour",[Interval Start Time]) == 1 ? "13" : 
datepart("hour",[Interval Start Time]) == 2 ? "14" : 
datepart("hour",[Interval Start Time]) == 3 ? "15" : 
datepart("hour",[Interval Start Time]) == 4 ? "16" : 
datepart("hour",[Interval Start Time]) == 5 ? "17" : "") 
+"."+RIGHT("0" + (DT_WSTR,2) datepart("mi",[Interval Start Time]),2) 

あなたはSSISのタスク「派生列」の表現を探していると「間隔開始時刻は、」日時であると仮定した考え。 私はこの助けを願っています。

+0

これは機能しません。私はエラーが発生します。 "データフロータスクのエラー:関数" Year "はデータ型" DT_WSTR "をサポートしていません。 – Djbril

+0

これは単純なキャストで、常に動作します。 –

+0

'Interval Start Time'は既に派生列の(DT_DBTIMESTAMP)[Interval Start Time]のdatetime形式です。 – Djbril

関連する問題