我能做到
select substr(to_char(20041111), 1, 4) FROM dual;
2004
有没有办法不先转换成字符串?
答案 0 :(得分:4)
您可以使用FLOOR function:
select floor(20041111/10000) from dual;
答案 1 :(得分:3)
以下内容未转换为字符串,但我不确定它是否更具可读性......:
select floor(20041111 / power(10, floor(log(10, 20041111) - 3)))
from dual;
log(10,20041111) - > 8.3 ......意思是10 ^ 8.3 ... = 20041111
如果您设置此值,则会获得数字的基数10表示中的位数
如果你想删除数字,你只需要除以10 ^(#digits - 3)(而不是-4,因为10 ^ 1已经有2位数)
答案 2 :(得分:1)
另一种方法是使用REGEXP_REPLACE
SELECT REGEXP_REPLACE(20041111,'....$') FROM dual;