SSRS 2017连接SAP HANA:BUDAT列nVARCHAR转日期格式异常求助
解决SSRS连接SAP HANA时的日期格式化问题
我来帮你拆解下两次尝试踩的坑,然后搞定这个日期格式需求:
- 尝试1的问题:你用了SQL Server的
CONVERT函数,但当前查询是在SAP HANA的SQL环境下执行的,HANA的日期转换逻辑和SQL Server完全不同;而且你拼接出的是无分隔符的字符串(比如01012019),HANA根本无法识别为有效日期,自然触发语法错误。 - 尝试2的问题:
FORMAT是SQL Server专属函数,你的查询通过ODBC发送给HANA执行时,HANA不认识这个语法,误把dd/MM/yyyy当成了列名,所以才会报“无效列名”的错误。
下面给你两个可行的解决方案,按需选择:
方案一:在SAP HANA SQL中直接处理(推荐)
HANA有专门的日期转换函数,先把YYYYMMDD格式的字符串转成日期类型,再转成你需要的dd/MM/yyyy格式字符串,代码如下:
TO_VARCHAR(TO_DATE(SAPABAP1.AFRU.BUDAT, 'YYYYMMDD'), 'DD/MM/YYYY') AS FORMATTED_BUDAT
TO_DATE(SAPABAP1.AFRU.BUDAT, 'YYYYMMDD'):将20190101这类字符串转换为HANA原生的日期类型TO_VARCHAR(..., 'DD/MM/YYYY'):把日期类型转成指定格式的字符串,返回给SSRS后直接就是你要的样式
方案二:在SSRS报表层面处理
如果不想修改SQL语句,也可以在SSRS端完成转换:
- 在报表文本框的表达式中写入:
先把=Format(CDate(Left(Fields!BUDAT.Value,4) & "-" & Mid(Fields!BUDAT.Value,5,2) & "-" & Right(Fields!BUDAT.Value,2)), "dd/MM/yyyy")20190101拆分为2019-01-01,用CDate转换为SSRS可识别的日期类型,再通过Format输出成目标格式。 - 更简便的方式:如果你的SSRS版本支持,可直接在数据集字段的属性中,将“格式”设置为
dd/MM/yyyy——不过要先在数据集的计算字段里用CDate把字符串转成日期类型。
两种方案里更推荐方案一,数据库层面处理效率更高,还能避免SSRS端可能出现的类型转换异常。
内容的提问来源于stack exchange,提问作者Tony K
相关产品推荐
相关产品推荐

