數據庫的九個日期函數&&時間比較


1、NOW

 獲取當前日期和時間的函數。

 語法: NOW()

 例如:select NOW();

 

2、CURDATE

 獲取當前的日期

 語法:CURDATE()

 

3、CURTIME()

 獲取當前時間

 語法:CURTIME()

 

4、DATE

 獲取日期時間或者日期的日期部分

 語法:DATE(date)

 date 參數是合法的日期表達式。

例如:

 

5、EXTRACT

 獲取返回日期/時間的單獨部分,比如年、月、日、小時、分鍾等等。

 語法:EXTRACT(unit FROM date)

 date 參數是合法的日期表達式。

 unit 參數可以是下列的值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如獲取當前年月:select EXTRACT(YEAR_MONTH FROM '2017-01-02 23:11:45') ;

 

 

 

 

6、DATE_ADD

 將日期添加指定的時間間隔。

 語法:DATE_ADD(date,INTERVAL expr type)

 date 參數是合法的日期表達式。expr 參數是添加的時間間隔。

 type 參數可以是下列值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如:select DATE_ADD(now(),INTERVAL 2 DAY); //獲取兩天后的時間

 7、DATE_SUB

 將日期減去指定的時間間隔。

 語法:DATE_SUB(date,INTERVAL expr type)

 date 參數是合法的日期表達式。expr 參數是添加的時間間隔。

 type 參數可以是下列值:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

 例如:select DATE_SUB(now(),INTERVAL 2 DAY); //獲取兩天前的時間

   

8、DATEDIFF

 獲取兩個日期之間的天數。(只有日期部分參與計算)

 語法:DATEDIFF(date1,date2)

 date1 和 date2 參數是合法的日期或日期/時間表達式。

 例如:SELECT DATEDIFF(NOW(),'2008-08-08') AS 北京奧運會多天前;

  

  趕巧算一下我多大了,哎已經23歲半了,歲月不饒人啊,言歸正傳,這里是dete1-date2的日期部分,所以我查出來的是負數

 

9、DATEFORMAT

 格式化日期時間 

語法:DATE_FORMAT(date,format)

 date 參數是合法的日期。format 規定日期/時間的輸出格式。

 格式:描述

%a:縮寫星期名

%b:縮寫月名

%c:月,數值

%D:帶有英文前綴的月中的天

%d:月的天,數值(00-31)

%e:月的天,數值(0-31)

%f:微秒

%H:小時 (00-23)

%h:小時 (01-12)

%I:小時 (01-12)

%i:分鍾,數值(00-59)

%j:年的天 (001-366)

%k:小時 (0-23)

%l:小時 (1-12)

%M:月名

%m:月,數值(00-12)

%p:AM 或 PM

%r:時間,12-小時(hh:mm:ss AM 或 PM)

%S:秒(00-59)

%s:秒(00-59)

%T:時間, 24-小時 (hh:mm:ss)

%U:周 (00-53) 星期日是一周的第一天

%u:周 (00-53) 星期一是一周的第一天

%V:周 (01-53) 星期日是一周的第一天,與 %X 使用

%v:周 (01-53) 星期一是一周的第一天,與 %x 使用

%W:星期名

%w:周的天 (0=星期日, 6=星期六)

%X:年,其中的星期日是周的第一天,4 位,與 %V 使用

%x:年,其中的星期一是周的第一天,4 位,與 %v 使用

%Y:年,4 位

%y:年,2 位

 

 

 

數據庫對日期進行比較

原則是先把兩個日期的格式統一一下,然后把日期字符串轉化為日期,最后進行比較

轉化為日期的兩個時間可以做加減運算得出的結果為天數.

結果*24則得出的是小時數

結果*24*60得出的是分鍾數

結果*24*60*60得出的是秒數

ceil((To_date(to_char(sysdate, 'yyyy-MM-dd HH24:mi:ss'),'yyyy-mm-dd hh24-mi-ss') -

            To_date(GXSJ, 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60) > 10

計算兩個日期相差的分鍾數

ceil和floor函數在一些業務數據的時候,有時還是很有用的。

ceil(n) 取大於等於數值n的最小整數;

floor(n)取小於等於數值n的最大整數

 

select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

在今天只后:

select * from up_date where update > to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update >= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

精確時間:

select * from up_date where update = to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

在某段時間內:

select * from up_date where update between to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update < to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update > to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss') select * from up_date where update <= to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss') and update >= to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')

 

mysql中日期的比較

select * from student where '2012-02-27 00:00:00' < created_date and '2012-02-29 00:00:00' > created_date

select * from student where UNIX_TIMESTAMP('2012-02-27 00:00:00') < UNIX_TIMESTAMP(created_date) and UNIX_TIMESTAMP('2012-02-29 00:00:00') > UNIX_TIMESTAMP(created_date);

SELECT * FROM student WHERE (UNIX_TIMESTAMP(created_date) - UNIX_TIMESTAMP('2012-02-26 00:00:00') ) >= 0 AND (UNIX_TIMESTAMP(created_date) - UNIX_TIMESTAMP('2012-02-29 00:00:00') ) <= 0

MySql中時間比較的實現

unix_timestamp 函數可以接受一個參數,也可以不使用參數。它的返回值是一個無符號的整數。不使用參數,它返回自1970年1月1日0時0分0秒到現在所經過的秒數,如果使用參數,參數的類型為時間類型或者時間類型的字符串表示,則是從1970-01-01 00:00:00到指定時間所經歷的秒數。

有了這個函數,就可以很自然地把時間比較轉換為一個無符號整數的比較。

例如,判斷一個時間是否在一個區間內

unix_timestamp( time ) between unix_timestamp( 'start ') and unix_timestamp( 'end' )

 

mysql中多條件判斷:

要求日期在2017-12-28,且city這一列的值為Beijing,SQL語句如下:

SELECT * FROM table_name where UNIX_TIMESTAMP(flightDate)=UNIX_TIMESTAMP('2017-12-28') and city='Beijing';

 

 

這篇文章主要介紹了Mysql中日期比較大小的方法,需要的朋友可以參考下

 

假如有個表product有個字段add_time,它的數據類型為datetime,有人可能會這樣寫sql:

 代碼如下

?

1

select * from product where add_time = '2013-01-12'

對於這種語句,如果你存儲的格式是YY-mm-dd是這樣的,那么OK,如果你存儲的格式是:2013-01-12 23:23:56這種格式你就悲劇了,這是你就可以使用DATE()函數用來返回日期的部分,所以這條sql應該如下處理:

 代碼如下

?

1

select * from product  where  Date(add_time) = '2013-01-12'

再來一個,如果你要查詢2013年1月份加入的產品呢?

 代碼如下

?

1

select * from product where date(add_time) between '2013-01-01' and '2013-01-31'

你還可以這樣寫:

?

1

select * from product where Year(add_time) = 2013 and Month(add_time) = 1

 

這些你該知道mysql日期函數在對你處理日期比較問題的作用了吧?

其date_col的值是在最后30天以內:

 代碼如下

?

1

2

3

mysql> SELECT something FROM table

 WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

DAYOFWEEK(date)

返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標准。

 代碼如下

?

 

1

2

3

mysql> select DAYOFWEEK('1998-02-03');

 -> 3

WEEKDAY(date)

返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

 代碼如下

?

1

2

3

4

5

mysql> select WEEKDAY('1997-10-04 22:23:00');

 -> 5

 mysql> select WEEKDAY('1997-11-05');

 -> 2

DAYOFMONTH(date)

返回date的月份中日期,在1到31范圍內。

 代碼如下

?

1

2

3

mysql> select DAYOFMONTH('1998-02-03');

 -> 3

DAYOFYEAR(date)

 

返回date在一年中的日數, 在1到366范圍內。

 代碼如下

?

1

2

3

mysql> select DAYOFYEAR('1998-02-03');

 -> 34

MONTH(date)

 

返回date的月份,范圍1到12。

 代碼如下

?

1

2

3

mysql> select MONTH('1998-02-03');

 -> 2

DAYNAME(date)

返回date的星期名字。

 代碼如下

?

1

2

3

mysql> select DAYNAME("1998-02-05");

 -> 'Thursday'

MONTHNAME(date)

返回date的月份名字。

 代碼如下

?

1

2

3

mysql> select MONTHNAME("1998-02-05");

 -> 'February'

QUARTER(date)

返回date一年中的季度,范圍1到4。

 代碼如下

?

1

2

mysql> select QUARTER('98-04-01');

 -> 2

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM