首页 > 解决方案 > 如何格式化输出以使其以句子形式输出?

问题描述

编写用于检索的 SQL 以检索每个提交维修的设备的序列号、描述、销售日期、请求维修的客户名称、维修说明以及维修费用。(需要加入两个表)。

格式化输出,使其以句子形式输出,如下所示:

“维修设备 9001 DVD 播放器,于 2018 年 1 月 1 日出售给 A.GREEN,以解决 DVD Stuck 问题,费用为 67.50 欧元”。

如果不存在十进制值,请确保输出零。

不知道用什么来格式化输出..搜索 dbms 并打印,但我不确定这是否是问题所要求的。提前致谢!

客户表

CUSTID | CUSTNAME | CUSTPHONE | CUSTEMAIL
1001     Aaa        0123        GReen@mail.com
1002     BBB        0121        bbb@mail.com 
1003     CCCC       0333        ccc@mail.com 

app修复表

serialNO | RepairDate| RepairDesc| repairCost | Customer_ID
9001       4-Mar-18       0123        67.5          1001
9002       4-JUN-18       0121        60.7          1002
9003       4-AUG-18       0333        102.5         1003

器具表

serialNO |    appDESC     | APPSALEDATE | GUARENTEELENGTH 
9001       DVD PLAYER       1-jan-18          2         
9002       FRIDGE FREEZER   3-may-18          5         
9003       48 TV            5-jun-18          2       

我的选择查询代码

select appliance.serialNo, appliance.appDesc, TO_CHAR(appliance.appSaleDate, 'DDTH MONTH YY') AS "SALE DATE", 
UPPER(Customer.custName) AS "CUSTOMER NAME", Customer.custEmail from appliance 
inner join appRepair ON appliance.serialNo=appRepair.serialNo
inner join Customer ON appRepair.customer_id=Customer.custID;

预期输出:

“维修设备 9001 DVD 播放器,于 2018 年 1 月 1 日出售给 A.GREEN,以解决 DVD Stuck 问题,费用为 67.50 欧元”。

标签: sqloracle

解决方案


您可以使用包含多个连接的此类查询:

select 'The repair to appliance '||a.serialNo||' '||a.appDesc||
       ', sold on '||to_char(a.appSaleDate, 'DDTH MONTH RRRR')||
       ' to '||upper(substr(c.custEmail,1,instr(c.custEmail,'@')-1))||
       ' to solve the issue '||substr(a.appDesc,1,instr(a.appDesc,' ')-1)||
       ' Stuck will cost '|| 
         ltrim(to_char(repairCost, 'U999G999D00',
                       'NLS_NUMERIC_CHARACTERS = ''.,''NLS_DUAL_CURRENCY=EUR'))
        as "Output"
  from appliance a
  join appRepair ar on a.serialNo=ar.serialNo
  join customer c on ar.customer_id=c.custID;

Demo

如果您的NLS_CHARACTERSETDB 参数是,那么您可以将列WE8ISO8859P1的最后一部分替换为Output

' Stuck will cost '||unistr('\20AC')|| 
             ltrim(to_char(repairCost, '999G999D00',
                           'NLS_NUMERIC_CHARACTERS = ''.,'''))

能够看到欧元货币符号。


推荐阅读