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