在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格
Posted
技术标签:
【中文标题】在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格【英文标题】:In SQL Plus, getting extra trailing spaces for second column when using lpad in Oracle 11g and above version 【发布时间】:2021-03-31 02:08:13 【问题描述】:示例代码:
spool "xy2.dat"
set heading off
set pause off
set termout off
set linesize 164
select 'start', lpad(current_date,12,'0'), current_date, 'gap', current_date, 'end' from dual
/
spool off
Oracle 10g 输出:
start 00021-DEC-20 21-DEC-20 gap 21-DEC-20 end
Oracle 11g 及以上输出:
start 00021-DEC-20 21-DEC-20 gap 21-DEC-20 end
SQL Plus for Oracle 11g 中的输出似乎很奇怪,我们是否有导致这种不同行为的根本原因。
【问题讨论】:
我无法在我的 11g 上重现它。 【参考方案1】:看起来即使不显示列名(HEADING OFF),它们仍然占用空间。
由于您不需要列名,一个简单的解决方案可能是使用短列别名:
SET HEADING OFF
SELECT
'start' AS c1,
LPAD( CURRENT_DATE, 12, '0' ) AS c2,
CURRENT_DATE AS c3,
'gap' AS c4,
CURRENT_DATE AS c5,
'end' AS c6
FROM dual
结果:
start 00021-DEC-20 21-DEZ-20 gap 21-DEZ-20 end
这是之前的样子:
start 00021-DEC-20 21-DEZ-20 gap 21-DEZ-20 end
【讨论】:
以上是关于在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL PLUS ORACLE 11gr1 上使用 DATABASE 命令
是否可以在 Oracle SQL*plus 脚本中以编程方式构造替换变量的名称?
oracle11g sql dever链接提示ora-12505,sql plus可以正常连接