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



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

试试:

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;
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;

最新更新