2016-03-15 67 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; 
相關問題