2016-03-15 68 views
2

我能做如何获得第4位的数字,的Oracle SQL

select substr(to_char(20041111), 1, 4) FROM dual; 

2004 

有没有转换为字符串第一个方法是什么?

+1

'select substr(20041111,1,4)from dual;'也可以。 –

+3

如果它总是8位数字并且它被存储为一个INT,那么你可以只用10000 – JNevill

+1

@WernfriedDomscheit哦是的。我假设它转换为引擎盖下的字符串/字符? – NimChimpsky

回答

4

可以使用FLOOR function

select floor(20041111/10000) from dual; 
+0

是否需要地板? (许多dbms产品在这里返回一个整数。) – jarlh

+0

是的,它是需要的,否则你会得到2004.1111 –

+0

我看,谢谢你的信息。 – jarlh

3

下列不转换为字符串,但我不知道它是更具可读性...:

select floor(20041111/power(10, floor(log(10, 20041111) - 3))) 
from dual; 

日志(10,20041111 ) - > 8.3 ...意思是10^8.3 ... = 20041111

如果你发出这个数值,你就得到你的数字的基数为10的数字位数

,如果你想删除的数字,你只需要10 ^分(#digits - 3)(而不是-4自10^1已经有2位)

+1

我知道你做了什么。但其余的一个litle解释会很好。 –

+1

很好用,直到你输入一个三位数的数字,在这个数字上右边用零填充 - 这可能不是期望的结果。这将由OP来定义规则。如果你想避免右键填充(如果数字小于1000,可以得到前四位或更少),那么:floor(:x/power(10,最大(floor(log(10,:x)-3),0) )) –

1

另一种方法是使用REGEXP_REPLACE

SELECT REGEXP_REPLACE(20041111,'....$') FROM dual; 
相关问题