oracle內建函式 trunc 使用

2021-06-19 07:04:01 字數 2874 閱讀 8371

trunc  是 truncate 的簡寫。

中文翻譯是 「截斷」或 「截短」。

表面看上去,應該是對字串或是數字進行擷取。 實際上這個函式有兩種用法, 而且這兩種用法看上去很不一樣。

1. 對 number 型別使用。其工作機制與round函式極為類似,只是該函式不對指定小數前或後的部分做相應捨入選擇處理,而統統截去。

2. 對日期型別使用。

語法格式:

trunc(number[,decimals])

--number 待做擷取處理的數值

--decimals 指明需保留小數點後面的位數。可選項,忽略它則截去所有的小數部分。

需要特別注意的是, 這個引數可以為負數,表示為小數點左邊指定位數後面的部分以 0 替換。比如 trunc(123.456789,-1) = 120

使用例項:

1)  decimals 不設定,截去所有小數部分

select trunc(123.456789) from dual;
返回 : 123

2) decimals 設定為正整數

select trunc(123.456789,2) from dual;

返回 123.45

比較使用round的狀況:

select round(123.456789,2) from dual;

返回 123.46  (四捨五入了)

3) decimals 設定為負整數

select trunc(123.456789,-1) from dual;

返回: 120 (最後一位從 3 變成 0 了)

4) decimals 設定為小數

select trunc(123.456789,2.8) from dual;select trunc(123.456789,2.4) from dual;

返回: 123.45

看上去decimals可以設定成小數,只是小數部分完全忽略,設定小數沒什麼意義。( 但是如果這個引數部分是計算出來的小數,就沒有必要做型別轉換)

語法格式:

trunc(date[,fmt])

date 乙個日期值

fmt 日期格式,該日期將由指定的元素格式所擷取。忽略它則由最近的日期擷取

這個函式的使用解釋應該是:  返回日期date所在期間(引數fmt)的第一天日期

fmt: 對應的參數列:

本週星期日:day或dy或d (每週順序:日,一,二,三,四,五,六)

本月初日期:month或mon或mm或rm

本季日期:q

本年初日期:syear或year或yyyy或yyy或yy或y(多個y表示精度) 

本世紀初日期:cc或scc

【返回】:日期

使用例項:(以當前日期 sysdate 為例)

1.  取得當前日期

select trunc(sysdate) from dual;

select trunc(sysdate ,'dd') from dual;

返回:  20-11月-13

2. 返回本週星期日

select trunc(sysdate,'d') from dual;
因為西方國家是從週日為一周的開始,

對於中國來說, 這個返回的其實是上週的週末。

如果要得到中國習慣的本週末的話, 就要加上 7 天了。

select trunc(sysdate,'d')+7 from dual;
類似的用法還可以用:

select trunc(sysdate,'dy')+7 from dual;

select trunc(sysdate,'day')+7 from dual;

3. 返回本季的開始時間

select trunc(sysdate,'q') from dual;
4. 返回本月開始時間

select trunc(sysdate,'month') from dual;

select trunc(sysdate ,'mm') from dual;

5. 本年開始時間

select trunc(sysdate,'year') from dual;

select trunc(sysdate ,'yyyy') from dual;

6.本小時開始時間

select trunc(sysdate ,'hh24') from dual;
返回當天的日期

7. 本分鐘開始時間

select trunc(sysdate ,'mi') from dual;

同樣返回當天的日期

1. 注意, 不能對string 型別來使用這個函式:

select trunc('abcdef',2) from dual;

這種用法是錯誤的。

但是, 一下這樣卻是可以的:

select trunc('123.456789',2) from dual;

個中差別, 應該不難理解^^

2. 這裡頻繁使用到dual 這張表:

dual是乙個虛擬表,用來構成select的語法規則,oracle保證dual裡面永遠只有一條記錄。

Oracle 函式使用 TRUNC

1 做日期格式轉換 select trunc sysdate from dual 2020 07 16,時間格式的年月日 select trunc sysdate,yy from dual 2020 1 1,返回當年第一天 select trunc sysdate,mm from dual 2020...

oracle函式trunc的使用

oracle函式trunc的使用 1 日期比較時精確到日,可以使用 trunc sysdate,dd 函式。函式支援格式有 yyyy mm dd hh mi 可以用 select trunc sysdate,yyyy from dual 看看結果是什麼。不要按下面的方式比較日期 to date to...

oracle函式trunc的使用

1 日期比較時精確到日,可以使用 trunc sysdate,dd 函式。函式支援格式有 yyyy mm dd hh mi 可以用 select trunc sysdate,yyyy from dual 看看結果是什麼。不要按下面的方式比較日期 to date to char logtime,yyy...