在 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可以正常连接

SQL*Plus Oracle 中的列格式化

Oracle where exists 子句不适用于 SQL Plus

SQL Plus 无法识别 Oracle PL/SQL 语句