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