Cognos数据项表达式

时间:2017-08-14 20:53:32

标签: informix cognos-10 isql

我在使用Informix数据库作为数据源时,试图使用Cognos 10.2.1(Report Studio)中的时间函数。

我的时间字段存储为smallint,4位数字,代表24小时制。我正在尝试将时间显示为下午6:00,上午11:30,下午3:00等。我有一个单独的数据表达式来计算字符串' AM'或者' PM'取决于小时值,但我在执行整个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  

1 个答案:

答案 0 :(得分:0)

为什么不用DATETIME HOUR TO MINUTE;至少你只需处理将24小时制转换为12小时制。午夜存储为0和中午为1200,午夜时分为2359?我相信Cognos使用相当现代的Informix版本,因此您应该能够使用TO_CHAR函数:

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(美国/太平洋地区);目前的时间不是我半夜。