PL/SQL: 中心查询RESULTS

PL/SQL: Center query RESULTS

我用谷歌搜索了所有我知道的方法Google。我需要一些新的眼光来看待这个。

我正在尝试将查询的结果居中。这是我到目前为止所拥有的...

    set lines 2000 pages 2000
    COLUMN total HEADING "Total" FORMAT A20 JUSTIFY CENTER
    COLUMN sending_fi HEADING "Sending M" FORMAT A20 JUSTIFY CENTER
    COLUMN receiving_fi HEADING "Receiving M" FORMAT A20 JUSTIFY CENTER
    COLUMN status HEADING "Payment Status" FORMAT A20 JUSTIFY CENTER
    SET UNDERLINE =
    select
        count(*) as "Total",
        p.sending_fi,
        p.receiving_fi,
        p.status
    from
        my_schema.my_table p
    where
        p.match_date
            between
                to_date
                    (
                        '2017/10/26:00:00:00',
                        'yyyy/mm/dd:hh24:mi:ss'
                    )
            and
                to_date
                    (
                        '2017/10/28:23:59:59',
                        'yyyy/mm/dd:hh24:mi:ss'
                    )
    and
        p.expedited='1'
    and
        p.status='DELIVERED'
    group by
        p.sending_fi,
        p.receiving_fi,
        p.status
    order by
        1
        DESC
    ;

产生此输出...

总发送 M 接收 M 支付状态<br> ================================================ ========== ================= 266759 BAC BAC 交付<br> 49954 JPM BAC 交付<br> 45194 BAC JPM 交付<br> 25990 WFC BAC 交付<br> 25676 JPM WFC 交付<br> 24120 WFC JPM 交付<br> 23565 BAC WFC 交付<br>

第 HEADERS 列(姓名)居中,但我一直不知道如何使结果居中。

我是一个 non-privileged 用户(我真正做的只是 select 更新和插入),SQL 技能非常有限。请温和地提出您的建议。

您也许可以使用 LPAD。

这是一个简单的例子:

COLUMN blks HEADING "Num Blocks" FORMAT A10 JUSTIFY CENTER

select 
lpad(to_char(blocks),(10-length(to_char(blocks)))/2+length(to_char(blocks)),' ') blks 
from user_segments
where rownum < 11;

想法是用空格中格式大小和列值大小之间的差值的一半填充左侧的列。

输出:

Num Blocks
----------
    16
    16
    16
    16
    16
    16
    16
    16
    16
    16

10 rows selected.

鲍比

最初我是作为评论写的。然后我想把这个问题作为一个副本来结束;但我发现的唯一重复没有答案:只是一条评论说同样的话。 (我应该知道,那也是我的评论!)

Column Formatting JUSTIFY not working

答案:

您似乎想要 SQL*Plus 中的答案。 没有答案。字符串和日期始终对齐到列的左侧,数字对齐到右侧。时期。你不能改变它(除了通过添加到字符串本身,在查询中 - 通过用空格填充;完全浪费时间!)如果你需要生成 "good looking" 报告,以及 SQL*Plus不够好,你必须使用报告工具;无法在 SQL*Plus.

中完成

SQL 命令 COLUMN ... FORMAT ... JUSTIFY 似乎有些混乱。手册是这样说的:

JUS[TIFY] {L[EFT] | C[回车] | R[正确]}

对齐标题。如果您不使用 JUSTIFY 子句,则 NUMBER 列的标题默认为 RIGHT,其他列类型的标题默认为 LEFT。

https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm#BACHCABF

Bobby 的回答适用于文本输出。您还可以利用 sqlplus 的 HTML 标记功能并生成格式化的 html 输出。扩展 https://docs.oracle.com/database/121/SQPUG/ch_seven.htm#SQPUG531 的示例是

create table t1 (
id number
, dt date 
, vc varchar2(20) 
, constraint pk_t1 primary key (id) );

begin     
for i in 1..10 loop
 insert into t1 values (i,sysdate + i , 'Row '||i);
end loop;
commit;
end;
/

SET MARKUP HTML ON PREFORMAT OFF ENTMAP ON -
HEAD "<TITLE>Department Report</TITLE> -
<STYLE type='text/css'> -
<!-- BODY {background: #FFFFC6} --> -
<!-- TD { text-align: center} --> -
</STYLE>" -
BODY "TEXT='#FF00Ff'" -
TABLE "WIDTH='90%' BORDER='5'"

然后运行

spool t.html

接着是您的查询,然后是

host firefox t.html