Oracle SQL:使用char表示数字的千分之一

时间:2014-10-12 16:30:06

标签: sql oracle character

我是Oracle SQL的新手,我遇到了这个小问题。有没有办法用一个'*'字符表示每个千分之一的数字?假设我有一个数字5000,输出将看起来像'****',1250'*',560'',2200'**'等。我正在调查TO_CHAR()函数,但我找不到任何可用的东西。谢谢你的回答。

2 个答案:

答案 0 :(得分:6)

试试:

SELECT RPAD(' ',1+TRUNC(my_number/1000),'*') FROM DUAL;
  • RPAD将根据需要添加*字符串,以获得所需的长度。
  • 请注意字符串' '。它确实包含一个空格(因此1+TRUNC(...))。这是必需的,因为Oracle将空字符串视为NULL。将NULL作为RPAD的第一个参数传递将返回NULL而无需进一步处理。
  • 前一点的推论,你的结果将有一个领先的空间。您可以使用SUBSTR(... ,2) 删除它,但仍然是因为Oracle将空字符串视为NULL,这将为低于1000的值生成NULL结果。

作为替代解决方案,如果您的值具有不高的上限,则可能基于SUBSTR的解决方案值得考虑:

SELECT my_number, SUBSTR('*****', 0, TRUNC(my_number/1000)) FROM my_table;

答案 1 :(得分:0)

select id,
case when id >= 5000 then '*****' 
     when id >= 4000 then '****' 
     when id >= 3000 then '***' 
     when id >= 2000 then '**' 
     when id >= 1000 then '*' 
     else                 ''  
end from t1;