如何在RTF模板中将XDO生成的日期AM/PM转为小写?
把RTF模板日期的AM/PM转小写的解决方案
你遇到的SQL扩展和XSL函数不能混用的问题,BI Publisher确实有这个限制,直接用纯XSLT/xdoxslt函数就能搞定,给你两个可行的方法:
方法1:用translate()转大小写
直接对原日期格式的输出做字符串转换,把大写的AM/PM换成小写:
<?xdoxslt:translate(xdoxslt:format_date(xdoxslt:sysdate_as_xsdformat(), 'DD-MON-YYYY HH:MI:SS PM', 'en-US'), 'AMPM', 'ampm')?>
拆解一下逻辑:
xdoxslt:sysdate_as_xsdformat()先获取系统当前日期的标准XSD格式xdoxslt:format_date()将其转换为你需要的DD-MON-YYYY HH:MI:SS PM格式translate()函数直接替换字符,把A→a、M→m、P→p,一步转成小写的am/pm
方法2:直接用小写格式掩码(需确认版本支持)
部分BI Publisher版本支持用a代替PM作为格式掩码,直接输出小写的上午/下午标记,写法更简洁:
<?xdoxslt:format_date(xdoxslt:sysdate_as_xsdformat(), 'DD-MON-YYYY HH:MI:SS a', 'en-US')?>
如果你的版本支持这个掩码,这是最省事的方案,不需要额外的字符串转换。
关于SQL和XSL函数不能混用的处理
既然BI Publisher禁止在同一个表达式里混用两类函数,有两种思路:
- 全程使用XSLT/xdoxslt函数实现需求(就像上面的方法)
- 如果必须依赖SQL处理日期,就把格式转换逻辑放到数据模型的SQL查询里,比如用
TO_CHAR(sysdate, 'DD-MON-YYYY HH:MI:SS pm')生成带小写am/pm的日期字段,之后在RTF模板里直接引用该字段即可,无需在模板中编写函数逻辑
内容的提问来源于stack exchange,提问作者Arun Karthikeyan
相关产品推荐
相关产品推荐

