适配SSRS与JDE的字符串拼接及类型转换函数使用咨询
兼容SSRS与JDE的字符串拼接方案
你之前测试的三种写法报错的常见原因:
- 直接传3个参数的
CONCAT():JDE底层通常为DB2 for i数据库,原生CONCAT函数仅支持2个入参,多参数会直接触发语法错误,需要嵌套使用 - 用
||拼接报错:如果待拼接字段为数值、日期等非字符串类型,未开启数据库隐式转换配置的场景下会触发类型不匹配错误,需要手动转成字符类型 - 用
+拼接:+是SQL Server专属的字符串拼接符,DB2不识别该语法,会被判定为数值加法运算,非数值字段直接报错
方案1:数据集SQL查询侧实现(JDE数据库侧执行)
先对每个字段做类型转换和去空格处理(JDE字段默认右补空格),再拼接,两种可用写法:
- 嵌套CONCAT函数写法:
CONCAT(TRIM(CHAR(col1)), CONCAT(TRIM(CHAR(col2)), TRIM(CHAR(col3)))) AS keylookup
||运算符写法:
TRIM(CHAR(col1)) || TRIM(CHAR(col2)) || TRIM(CHAR(col3)) AS keylookup
如果涉及日期字段拼接,可以指定转换格式,比如转ISO标准日期格式:TRIM(CHAR(date_col, ISO))
方案2:SSRS侧计算字段实现(优先推荐)
完全规避数据库侧语法差异,兼容性100%:
- 数据集查询仅返回
col1、col2、col3三个原始字段,不需要在SQL中做拼接处理 - 右键对应数据集,选择「添加计算字段」,字段名填写
keylookup,字段源输入表达式:=Fields!col1.Value & Fields!col2.Value & Fields!col3.Value - 保存后即可在报表中直接调用
keylookup字段,不需要调整JDE侧SQL语法
JDE兼容SSRS的类型转换功能说明
JDE底层DB2 for i数据库支持SSRS可识别的类型转换能力:
- 标准SQL的
CAST()函数:如果你的JDE对应的IBM i版本为V7R1及以上,可直接使用标准CAST语法,写法示例:CAST(col1 AS VARCHAR(50)),SSRS可正常识别返回结果 - 旧版本JDE等效转换函数:如果版本较低不支持CAST,可使用DB2专有转换函数,SSRS驱动可正常兼容:
- 转字符类型:
CHAR(字段)、VARCHAR(字段) - 转整数类型:
INT(字段) - 转数值类型:
DECIMAL(字段, 总长度, 小数位数) - 转日期类型:
DATE(字段)
- 转字符类型:
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

