Mysql時間函數

來源:互聯網
上載者:User

標籤:

http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html

 

mysql中函數和關鍵字不區分大小寫。下文函數的datetime參數處既可以用時間字串也可以用時間變數或運算式。

一、擷取目前時間

下面幾個方法等效,字串環境輸出格式為:YYYY-MM-DD HH:MM:SS,數字環境輸出格式為:YYYYMMDDHHMMSS

now()current_timestamp()   / current_timestamplocaltime() /localtime localtimestamp() /localtimestamp

 

sysdate()

其他方法執行開始時就得到值了,sysdate()方法在函數中動態獲得值。

 

 

CURDATE()

CURRENT_DATE() / CURRENT_DATE

這兩個方法只擷取日期,字串環境中返回HH:MM:SS格式,數字環境中返回HMMSS格式

 

CURTIME()

CURRENT_TIME() / CURRENT_TIME

這兩個方法只擷取時間,數字環境中返回YYYYMMDD格式

 

UTC_DATE() /UTC_DATE

UTC_TIME() /UTC_TIME

UTC_TIMESTAMP()/UTC_TIMESTAMP

返回UTC時間(世界統一時間,0時區,我國在東8區,所以比我國本地時間慢8小時, 本地時間=UTC時間+8小時)

 

 

二、擷取時間部分資料

Date(datetime)

返回日期 yyyy-MM-dd

 

Time(datetime)

返回時間 hh:mm:ss

 

Year(datetime)

Quarter(datetime)

Month(datetime)

MonthName(datetime)

Day(datetime)

Hour(datetime)

Minute(datetime)

Second(datetime)

MicroSecond(datetime)

 

DayName(datetime)

返回星期幾的名字

Week(datetime)

等於Week(datetime,0)

 

Week(datetime, mode)

mode 一周的第一天 範圍 Week 1為第一周...
0 周日 0~53 本年度中有一個周日
1 周一 0~53 本年度中有3天以上
2 周日 1~53 本年度中有一個周日
3 周一 1~53 本年度中有3天以上
4 周日 0~53 本年度中有3天以上
5 周一 0~53 本年度中有一個周一
6 周日 1~53 本年度中有3天以上
7 周一 1~53

本年度中有一個周一

 

YearWeek(datetime)

年和周數

 

Extract( unit From datetime)

unit取值:  year, quarter, month, week, day, hour, minute, second, microsecond

       year_month, day_hour, day_minute, day_second, day_microsecond, hour_minute, hour_second, hour_microsecond, minute_second, minute_microsecond, second_microsecond

xxx_zzz格式的值表示選取的範圍xxxyyyzzz,而不是只選這兩項。

 

 

DayOfWeek(datetime)

datetime是一周的第幾天,(周日為一個星期的第一天,ODBC標準)

DayOfMonth(datetime)

datetime是一月的第幾天,1-31

DayofYear(datetime)

datetime是一年的第幾天,1-366

 

WeekDay(datetime)

datetime是一周中的第幾天,(周一為一個星期的第0天)

 

WeekOfYear(datetime)

datetime是一年中的第幾周,等於WEEK(datetime,3)。

 

Last_Day(date)

返回月份中最後一天

 

三、時間操作

+/-操作符

SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;  
-> 1998-01-01 00:00:00  

SELECT INTERVAL 1 DAY + "1997-12-31";  
-> 1998-01-01  

SELECT "1998-01-01" - INTERVAL 1 SECOND;  
-> 1997-12-31 23:59:59  

 

Date_Add(datetime, interval expr unit)

unit:   day, hour, minute, second, microsecond, week, month, quarter, year

  year_month, day_hour, day_minute, day_second, day_microsecond, hour_minute, hour_second, hour_microsecond, minute_second, minute_microsecond, second_microsecond

xxx_zzz格式的值表示選取的範圍xxxyyyzzz,而不是只選這兩項。

 

樣本:

select DATE_ADD(now(),INTERVAL 3 DAY)

select DATE_ADD(now(),INTERVAL -2.5 hour)

select DATE_ADD(now(),INTERVAL ‘01:15:30‘ hour_second)

select DATE_ADD(now(),INTERVAL ‘- 2 01:15:30‘ day_second)

 

 

AddDate(datetime, INTERVAL expr unit)

AddDate(datetime, days)

AddTime(expr1, expr2)

 

Date_Sub(datetime, interval expr unit)

用法同Date_Add(datetime, interval expr unit)

 

SubDate(datetime, INTERVAL expr unit)

SubDate(datetime, days)

SubTime(expr1, expr2)

 

timestampAdd(uint, interval, datetime_expr)

 

Period_Add(P,N)

增加N個月到階段P,P的格式為YYMM或者YYYYMM

select PERIOD_ADD(9801,2);  -- 199803 

 

PERIOD_DIFF(P1,P2)

返回P1和P2相差的月數,P的格式為YYMM或者YYYYMM

 

DateDiff(datetime1, datetime2)

返回相差天數

 

TimeDiff(datetime1, datetime2)

返回相差時間(hh:mm:ss),兩個參數格式必須相同

 

TimeStampDiff(unit,datetime1,datetime2)
返回日期或日期時間運算式datetime_expr1 和datetime_expr2the 之間的整數差。

unit參數指定結果單位,可用值為:

  • FRAC_SECOND 毫秒
  • SECOND  秒
  • MINUTE  分鐘
  • HOUR  小時
  • DAY  天
  • WEEK  星期
  • MONTH  月
  • QUARTER  季度
  • YEAR  年

 

樣本語句:

SELECT TIMESTAMPDIFF(SECOND, ‘2012-12-21‘, CURRENT_TIMESTAMP()) AS `Second`;

SELECT * from autotesting_mobiledevice where TIMESTAMPDIFF(SECOND, MDLastSynchTime, NOW())<6000;

 

注意事項:

秒以上單位的時間差計算都是以秒為基礎的。

天數的時間差是以24*60*60(86400)為依據的。假如相差間隔小於86400秒,則為0,如果>=86400秒且<86400*2秒,則為1。

如果單位為分鐘,那麼計算間隔分鐘是以60秒為依據的。假如相差間隔小於60秒,則為0,如果>=60秒且<60*2秒,則為1。

select timestampdiff(day,"2012-08-22 15:15:15","2012-08-23 15:15:16");
1

select timestampdiff(day,"2012-08-22 15:15:17","2012-08-23 15:15:16");
0

 

 

三、時間轉換

time_to_sec(datetime)

返回總秒數

 

sec_to_time(seconds)

 

to_days(date)

from_days(days)

 

makeDate(year,dayofyear)

makeTime(hour,minute,second)

 

str_to_date(str,format)

select str_to_date(‘08.09.2008 08:09:30‘, ‘%m.%d.%Y %h:%i:%s‘); -- 2008-08-09 08:09:3

format:

  %M 月名字(January……December)  
  %W 星期名字(Sunday……Saturday)  
  %D 有英語首碼的月份的日期(1st, 2nd, 3rd, 等等。)  
  %Y 年, 數字, 4 位  
  %y 年, 數字, 2 位  
  %a 縮寫的星期名字(Sun……Sat)  
  %d 月份中的天數, 數字(00……31)  
  %e 月份中的天數, 數字(0……31)  
  %m 月, 數字(01……12)  
  %c 月, 數字(1……12)  
  %b 縮寫的月份名字(Jan……Dec)  
  %j 一年中的天數(001……366)  
  %H 小時(00……23)  
  %k 小時(0……23)  
  %h 小時(01……12)  
  %I 小時(01……12)  
  %l 小時(1……12)  
  %i 分鐘, 數字(00……59)  
  %r 時間,12 小時(hh:mm:ss [AP]M)  
  %T 時間,24 小時(hh:mm:ss)  
  %S 秒(00……59)  
  %s 秒(00……59)  
  %p AM或PM  
  %w 一個星期中的天數(0=Sunday ……6=Saturday )  
  %U 星期(0……52), 這裡星期天是星期的第一天  
  %u 星期(0……52), 這裡星期一是星期的第一天  
  %% 一個文字“%”。  
  所有的其他字元不做解釋被複製到結果中。

 

date_format(date,format)

time_format(time,format)

 

get_format(date|time|datetime, ‘eur|usa|jis|iso|internal‘)

擷取國家地區的時間格式

 

unix_timestamp()

返回自1970-1-1 0:00:00 UTC(因為中國是東八區,所以是8:00:00.)開始到當前系統時間為止的秒數

unix_timestamp(datetime)

早於1970-1-1 0:00:00 UTC的時間,返回0

from_unixTime(unix_timestamp)

字串環境輸出格式為:YYYY-MM-DD HH:MM:SS,數字環境輸出格式為:YYYYMMDDHHMMSS

 

from_unixTime(unix_timestamp, format)

 

 

convert_tz(datetime, from_tz, to_tz)

時區轉換,也可以通過date_add(),date_sub(),timestampadd()等函數實現

select convert_tz(‘2008-08-08 12:00:00‘, ‘+08:00‘, ‘+00:00‘); -- 2008-08-08 04:00:00

Mysql時間函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.