You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Netezza时间转换语句转为SQL Server函数适配IBM Cognos?

适配SQL Server的等价转换语句

针对你提供的Netezza时间转换逻辑,结合SQL Server语法和Cognos Framework Manager的兼容性,分两种场景给出等价实现:

场景1:POL.PERIOD_FROM_DATE是数字类型(存储为YYYYMMDDHH24MISSMS格式的数值)

原Netezza语句先将日期转成无格式的数字字符串,再解析为时间戳。在SQL Server中,我们需要先将数字转为字符串,再通过格式转换得到目标时间格式:

-- 转换为datetime2(1)类型,输出格式符合要求
CONVERT(datetime2(1), 
        STUFF(STUFF(STUFF(STUFF(CAST(POL.PERIOD_FROM_DATE AS VARCHAR(17)), 
                                9, 0, ' '), 
                          12, 0, ':'), 
                    15, 0, ':'), 
              18, 0, '.'), 
        121) AS EFFECTIVE_DATE

如果需要直接输出字符串格式的结果,可以再嵌套一层转换:

-- 直接输出指定格式的字符串
CONVERT(VARCHAR(23), 
        CONVERT(datetime2(1), 
                STUFF(STUFF(STUFF(STUFF(CAST(POL.PERIOD_FROM_DATE AS VARCHAR(17)), 
                                        9, 0, ' '), 
                                  12, 0, ':'), 
                            15, 0, ':'), 
                      18, 0, '.'), 
                121), 
        121) AS EFFECTIVE_DATE

场景2:POL.PERIOD_FROM_DATE是日期时间类型(如datetime、smalldatetime)

如果原字段本身就是日期时间类型,无需复杂的字符串转换,直接转换为datetime2(1)即可得到目标格式:

-- 直接转换为带1位毫秒的datetime2类型
CONVERT(datetime2(1), POL.PERIOD_FROM_DATE) AS EFFECTIVE_DATE

若要输出字符串格式,同样可以用CONVERT指定格式代码121:

-- 输出字符串格式的结果
CONVERT(VARCHAR(23), CONVERT(datetime2(1), POL.PERIOD_FROM_DATE), 121) AS EFFECTIVE_DATE

说明

  • datetime2(1)类型确保毫秒位只保留1位,符合你要求的2023-02-24 00:00:00.0格式
  • 格式代码121对应SQL Server的yyyy-mm-dd hh:mi:ss.mmm(24h)格式,适配目标输出样式
  • 以上语句均可直接在Cognos Framework Manager的数据源定义中使用

内容的提问来源于stack exchange,提问作者prudhvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:03:35