暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 显示数字中的特殊字符(十进制)

askTom 2016-02-29
238

问题描述

嗨,克里斯,
我需要达到一些值时,比如25,.50,.75 ,然后我需要显示/,//,///的顺序。
第一列单元格将始终是一些字符值,如列1 ,然后下一个单元格将显示数字。
所以,如果有值10.25 ,那么结果应该是10/。
在'。'(点)之后的值将被修复,例如25、50、75。
'。'值将更改之前。

CREATE TABLE列
(
OL1 NVARCHAR2(30) ,
OL2 NVARCHAR2(30) ,
OL3 NVARCHAR2(30) ,
OL4 NVARCHAR2(30) ,
OL5 NVARCHAR2(30) ,
OL6 NVARCHAR2(30) ,
OL7 NVARCHAR2(30)

);
/
插入列
(COL1,COL2,COL3,COL4,COL5 ,
COL6、COL7)

('列1','列2','列3','列4') ,
'COLUMN5', 'COLUMN6', 'COLUMN7');
/
插入列
(COL1,COL2,COL3,COL4,COL5 ,
COL6、COL7)

('2.25','x','99.50','x',
'x', 'x', '2.50');
/
插入列
(COL1,COL2,COL3,COL4,COL5 ,
COL6、COL7)

('5.25','10.75','10','20',
'5', '10', '25');

专家解答

感谢您提供测试用例。我觉得有点困惑!

要生成尾随斜杠,需要计算小数点后25的倍数。您可以通过从数字本身减去其截尾来实现这一点。然后使用此值填充适当的斜线数。

例如:

select v, 
       (v - trunc(v)) / 0.25 multiple,
       rpad('.', ((v - trunc(v)) / 0.25) + 1, '/') slashes,
       trunc(v) || substr(rpad('.', ((v - trunc(v)) / 0.25) + 1, '/'), 2) fm
from (
  select 1 + (rownum*.25) v from dual
  connect by level <= 5
);

         V   MULTIPLE SLASHES    FM       
---------- ---------- ---------- ----------
      1.25          1 ./         1/        
       1.5          2 .//        1//       
      1.75          3 .///       1///      
         2          0 .          2         
      2.25          1 ./         2/


将此公式插入执行此显示所需的列。如果有些可以包含“x”,则需要使用大小写/解码来管理这些。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论