2017-08-14 17 views
0

Informixデータベースをデータソースとして使用して、Cognos 10.2.1(Report Studio)内で時間機能を使用しようとしています。Cognosデータ項目内のケース、サブストリング、および連結式

私の時間フィールドは、24時間の時計を表すsmallint、4桁として格納されます。私は時間の値に応じて文字列 'AM'または 'PM'を計算する別のデータ式を持っていますが、午後6時、午前11時30分、午後3時などに表示する時間を得ようとしています。全体のconcat/substring関数を実行するときにいくつかのエラーが発生します。

case when char_length([Query1].[beg_tm]) = 4 
then (substring(cast([StartTime], char(5)), 1, 2)) || ':' || (substring (cast ([StartTime], char(5)), 3, 2)) || ([beg_AMPMcalc]) 
when char_length([Query1].[beg_tm]) = 3 
then (substring(cast([StartTime], char(5)), 1, 1)) || ':' || (substring(cast ([StartTime], char(5)), 3, 2)) || ([beg_AMPMcalc]) 
else '--' 
end 

答えて

0

DATETIME HOUR TO MINUTE;少なくとも24時間のクロックを12時間のクロックに変換するだけで済みます。真夜中は0、正午は1200、真夜中前の分は2359ですか? Cognosのは、あなたがTO_CHAR関数を使用することができるはずですので、私は、信じているのInformixのかなり現代版を使用しています。

DROP TABLE IF EXISTS times; 
CREATE TEMP TABLE times(p_time SMALLINT); 
INSERT INTO times VALUES(0); 
INSERT INTO times VALUES(59); 
INSERT INTO times VALUES(100); 
INSERT INTO times VALUES(845); 
INSERT INTO times VALUES(1159); 
INSERT INTO times VALUES(1200); 
INSERT INTO times VALUES(1259); 
INSERT INTO times VALUES(1300); 
INSERT INTO times VALUES(1815); 
INSERT INTO times VALUES(2359); 

SELECT TO_CHAR(CURRENT HOUR TO MINUTE, "%I:%M %p"), 
     p_time, 
     DATETIME(00:00) HOUR TO MINUTE + MOD(p_time, 100) UNITS MINUTE + (p_time/100) UNITS HOUR, 
     TO_CHAR(DATETIME(00:00) HOUR TO MINUTE + MOD(p_time, 100) UNITS MINUTE + (p_time/100) UNITS HOUR, "%I:%M %p") 
    FROM times; 

出力:

03:49 AM  0 00:00 12:00 AM 
03:49 AM  59 00:59 12:59 AM 
03:49 AM 100 01:00 01:00 AM 
03:49 AM 845 08:45 08:45 AM 
03:49 AM 1159 11:59 11:59 AM 
03:49 AM 1200 12:00 12:00 PM 
03:49 AM 1259 12:59 12:59 PM 
03:49 AM 1300 13:00 01:00 PM 
03:49 AM 1815 18:15 06:15 PM 
03:49 AM 2359 23:59 11:59 PM 

が、私はそのローカルを持つデータベース・サーバを使用しています時刻はUTCに設定され、タイムゾーンは-07:00(US/Pacific)です。現在の時間は私がいる夜の真中ではありません。

関連する問題