SQL日期函式

2021-09-06 16:11:29 字數 3552 閱讀 7882

日期函式提供了常用的日期/時間資訊處理功能,比如截斷、計算時間差等。oracle常用日期函式如表4-4所示。

常用日期函式

函 數 功 能 用法

add_months(x, y)    計算在日期x基礎上增加y個月後的日期 add_months(sysdate,2)

last_day(x)          返回日期x當月最後一天的日期 last_day(sysdate)

months_between(x, y) 返回日期x和y之間相差的月數 months_between(sysdate,hiredate)

round(x, y)       將日期x四捨五入到y所指定的日期單位(月或年)的第一天 round(sysdate,'month')

trunc(x, y)                  將日期x截斷到y所指定的日期單位(月或年)的第一天 round(sysdate,'year')

next_day(x, y)            計算指定日期x後的第乙個星期幾(由引數y指定)對應的日期

add_months(x, y)返回在日期/時間x基礎上增加y個月後的時間。引數x用於指定起始時間,可以是日期型的常量、欄位名或表示式,引數y可以是任意整數。如y值為負數,則返回在日期x基礎上減去y個月後的日期/時間;如y值為浮點數,則先將y截斷到整數字再進行運算。因此返回值只有年度、月份值可能會發生變化,小時、分、秒的值是不變的。例如:

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') t0,

to_char(add_months(sysdate,2),'yyyy-mm-dd hh24:mi:ss') t1,

to_char(add_months(sysdate,2.5),'yyyy-mm-dd hh24:mi:ss') t2 from dual;

t0 t1 t2

2014-06-13 14:09:52 2014-08-13 14:09:52 2014-08-13 14:09:52

last_day(x)返回日期/時間x當月最後一天的日期/時間,小時、分及秒等時間資訊不變,例如

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') t0,

to_char(last_day(sysdate),'yyyy-mm-dd hh24:mi:ss') t1 from dual;

t0 t1

2014-06-13 14:17:19 2014-06-30 14:17:19

months_between(x, y)返回日期x和y之間相差的月數。

返回值的符號確定原則:如果x小於(早於)y,則返回負數;如果x大於y,則返回正數;如果x等於y,則返回0。

時間差值的計算規則:如果x和y的「日」相同(比如都是14日)、或者均為月底(比如分別為「3月31日」和「4月30日」),則返回整數;否則oracle是以31天為基準,計算結果的小數部分,且忽略x和y在小時、分、秒層面的差異。例如:

select months_between(to_date('2008-12-23 01:23:45','yyyy-mm-dd hh24:mi:ss'),to_date('2008-12-23 15:23:45','yyyy-mm-dd hh24:mi:ss')) t0 from dual; --日相同,返回整數0

select months_between(to_date('2008-12-2 01:23:45','yyyy-mm-dd hh24:mi:ss'),to_date('2008-12-4 01:23:45','yyyy-mm-dd hh24:mi:ss')) t0 from dual; --以31天為基準,忽略時分秒,結果為-2/31

select months_between(to_date('1989-02-11','yyyy-mm-dd'),to_date('2014-06-13','yyyy-mm-dd')) t0 from dual ---304.064516129032

round(x, y)對日期進行四捨五入操作。引數x用於指定原始日期/時間,引數y用於指定四捨五入的方式——如果y的值為'year',則四捨五入到年度第一天(以7月1日為分界線);如果y的值為'month',則四捨五入到月份第一天(以16日為分界線);如果y的值為'day',則四捨五入到天的開始(零點零分零秒,以中午12:00為分界線)。例如:

sysdate to_char(round(sysdate,'day'),' round(sysdate,'month') round(sysdate,'year')

2014/6/13 15:03:09 2014-06-15 00:00:00 2014/6/1 2014/1/1

trunc(x, y)對日期/時間進行進行截斷操作,其邏輯類似於數值處理中的向下取整。引數x用於指定原始日期/時間,引數y用於指定截斷的方式——如果y的值為'year',則截斷到當前年度的第一天;如果y的值為'month',則截斷到當前月份的第一天;如果y的值為'day',則截斷到當天的開始(零點零分零秒)。

--select trunc(sysdate,'day') from dual; --2014/6/8

--select trunc(sysdate,'year') from dual; --2014/1/1

--select trunc(sysdate,'month') from dual; --2014/6/1

next_day(x, y)返回指定日期/時間之後的第乙個「星期幾」所對應的日期/時間(其小時、分、秒數值不變)。引數x用於指定原始日期/時間,引數y用於指定星期幾,其值可以是整數1~7(依次對應星期日~星期六)、或字元型的'星期一'~'星期日'(中文語言環境)、或者'mon'~'sun'(英文語言環境)。星期一 mon 星期二 tue 星期三 wed 星期四 thu 星期五 fri 星期六 sat 星期天 sun

select sysdate,to_char(next_day(sysdate,4),'yyyy-mm-dd hh24:mi:ss') from dual;

sysdate to_char(next_day(sysdate,4),'y

2014/6/13 16:04:17 2014-06-18 16:04:17

select sysdate, to_char(next_day(sysdate,'星期三'),'yyyy-mm-dd hh24:mi:ss') from dual;

select sysdate,to_char(next_day(sysdate,'wed'),'yyyy-mm-dd hh24:mi:ss') from dual;

--將當前會話語言環境改為簡體中文

alter session set nls_language='simplified chinese';

--將當前會話語言環境改為英文

alter session set nls_language=american;

select sysdate, to_char(next_day(sysdate,'wed'),'yyyy-mm-dd hh24:mi:ss') from dual;

sql日期函式

一.字元操作 1.替換指定字元 str replace string1,需要替換字元,替換成字元 substring string1,二.數值操作 三.日期操作 getdate 得到當前時間,可以設定得到各種時間格式.datepart 日期部分,日期 取指定時間的某乙個部分,年月天時分秒.dated...

SQL日期函式

sql日期函式中的型別碼可以為0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 20,21,22,23,24,25,100,101,102,103,104,105,106,107,108,109,100,110,111,112,113,114,120,121,126,127,13...

sql日期函式

一.字元操作 1.替換指定字元 str replace string1,需要替換字元,替換成字元 substring string1,二.數值操作 三.日期操作 getdate 得到當前時間,可以設定得到各種時間格式.datepart 日期部分,日期 取指定時間的某乙個部分,年月天時分秒.dated...