【问题标题】:PL/SQL: Center query RESULTSPL/SQL:中心查询结果
【发布时间】:2017-10-28 22:51:03
【问题描述】:

我已经用 Google 搜索了所有我知道的 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
    ;

产生这个输出...

Total Sending M Receiving M Payment Status
==================== ==================== ==================== ================= 266759 BAC BAC DELIVERED
49954 JPM BAC DELIVERED
45194 BAC JPM DELIVERED
25990 WFC BAC DELIVERED
25676 JPM WFC DELIVERED
24120 WFC JPM DELIVERED
23565 BAC WFC DELIVERED

列标题(名称)居中,但在我的一生中,我无法弄清楚如何将结果居中。

我是一个非特权用户(我所做的只是选择更新和插入),SQL 技能非常有限。请温柔对待您的建议。

【问题讨论】:

  • 这与SQL无关。 SQL 只是为您获取数据。列数据是左对齐、右对齐还是居中对齐取决于您用于选择数据的工具。字体样式和颜色相同。只要您使用诸如 Toad、SQL Developer 或 sql plus 之类的开发人员工具,您就不应该考虑这些事情。但是,一旦您为用户编写了程序,您就希望数据看起来很漂亮。因此,无论您使用的是 PHP/HTML 还是 C# 或其他什么,请告诉您的网格/表格将数据居中对齐。
  • 我想这是关于我从不使用的 sqlplus 报告。你试过COLUMN sending_fi FORMAT A20 JUSTIFY CENTER吗?我将编辑标签,以便您获得更好的帮助。
  • @ThorstenKettner - justify 只控制标题(OP 已经在脚本中包含了它,这就是他的标题已经居中的原因!)

标签: oracle formatting sqlplus


【解决方案1】:

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

Column Formatting JUSTIFY not working

回答

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

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

JUS[TIFY] {L[EFT] | C[回车] |右[IGHT]}

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

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

【讨论】:

    【解决方案2】:

    您也许可以使用 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.
    

    鲍比

    【讨论】:

      【解决方案3】:

      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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2015-11-21
        • 2017-03-24
        • 2011-02-02
        • 2023-02-25
        • 2010-09-27
        相关资源
        最近更新 更多