程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 日期和時光函數

mysql 日期和時光函數

編輯:MySQL綜合教程

mysql 日期和時光函數。本站提示廣大學習愛好者:(mysql 日期和時光函數)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql 日期和時光函數正文


mysql> SELECT something FROM tbl_name
WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) <= 30;

DAYOFWEEK(date)
前往 date 的禮拜索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值相符 ODBC 的尺度。
mysql> SELECT DAYOFWEEK('1998-02-03′);
-> 3

WEEKDAY(date)
前往 date 的禮拜索引(0 = Monday, 1 = Tuesday, … 6 = Sunday):
mysql> SELECT WEEKDAY('1998-02-03 22:23:00′);
-> 1
mysql> SELECT WEEKDAY('1997-11-05′);
-> 2

DAYOFMONTH(date)
前往 date 是一月中的第幾天,規模為 1 到 31:
mysql> SELECT DAYOFMONTH('1998-02-03′);
-> 3

DAYOFYEAR(date)
前往 date 是一年中的第幾天,規模為 1 到 366:
mysql> SELECT DAYOFYEAR('1998-02-03′);
-> 34

MONTH(date)
前往 date 中的月份,規模為 1 到 12:
mysql> SELECT MONTH('1998-02-03′);
-> 2

DAYNAME(date)
前往 date 的禮拜名:
mysql> SELECT DAYNAME(”1998-02-05″);
-> ‘Thursday'

MONTHNAME(date)
前往 date 的月份名:
mysql> SELECT MONTHNAME(”1998-02-05″);
-> ‘February'

QUARTER(date)
前往 date 在一年中的季度,規模為 1 到 4:
mysql> SELECT QUARTER('98-04-01′);
-> 2

WEEK(date)
WEEK(date,first)
關於禮拜日是一周中的第一天的場所,假如函數只要一個參數挪用,前往 date 為一年的第幾周,前往值規模為 0 到 53 (是的,能夠有第 53 周的開端)。兩個參數情勢的 WEEK() 許可你指定一周能否以禮拜日或禮拜一開端,和前往值為 0-53 照樣 1-52。這裡的一個表顯示第二個參數是若何任務的: 值 寄義
0 一周以禮拜日開端,前往值規模為 0-53
1 一周以禮拜一開端,前往值規模為 0-53
2 一周以禮拜日開端,前往值規模為 1-53
3 一周以禮拜一開端,前往值規模為 1-53 (ISO 8601)

mysql> SELECT WEEK('1998-02-20′);
-> 7
mysql> SELECT WEEK('1998-02-20′,0);
-> 7
mysql> SELECT WEEK('1998-02-20′,1);
-> 8
mysql> SELECT WEEK('1998-12-31′,1);
-> 53

留意,在版本 4.0 中,WEEK(#,0) 被更改成婚配 USA 歷法。 留意,假如一周是上一年的最初一周,當你沒有應用 2 或 3 做為可選參數時,MySQL 將前往 0:
mysql> SELECT YEAR('2000-01-01′), WEEK('2000-01-01′,0);
-> 2000, 0
mysql> SELECT WEEK('2000-01-01′,2);
-> 52

你能夠會辯論說,當給定的日期值現實上是 1999 年的第 52 周的一部門時,MySQL 對 WEEK() 函數應當前往 52。我們決議前往 0 ,是由於我們願望該函數前往“在指定年份中是第幾周”。當與其它的提取日期值中的月日值的函數聯合應用時,這使得 WEEK() 函數的用法靠得住。假如你更願望能獲得適當的年-周值,那末你應當應用參數 2 或 3 做為可選參數,或許應用函數 YEARWEEK() :
mysql> SELECT YEARWEEK('2000-01-01′);
-> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01′),5,2);
-> 52

YEAR(date)
前往 date 的年份,規模為 1000 到 9999:
mysql> SELECT YEAR('98-02-03′);
-> 1998

YEARWEEK(date)
YEARWEEK(date,first)
前往一個日期值是的哪一年的哪一周。第二個參數的情勢與感化完整與 WEEK() 的第二個參數分歧。留意,關於給定的日期參數是一年的第一周或最初一周的,前往的年份值能夠與日期參數給出的年份紛歧致:
mysql> SELECT YEARWEEK('1987-01-01′);
-> 198653

留意,關於可選參數 0 或 1,周值的前往值分歧於 WEEK() 函數所前往值(0), WEEK() 依據給定的年語境前往周值。
HOUR(time)
前往 time 的小時價,規模為 0 到 23:
mysql> SELECT HOUR('10:05:03′);
-> 10

MINUTE(time)
前往 time 的分鐘值,規模為 0 到 59:
mysql> SELECT MINUTE('98-02-03 10:05:03′);
-> 5

SECOND(time)
前往 time 的秒值,規模為 0 到 59:
mysql> SELECT SECOND('10:05:03′);
-> 3

PERIOD_ADD(P,N)
增長 N 個月到時代 P(格局為 YYMM 或 YYYYMM)中。以 YYYYMM 格局前往值。 留意,時代參數 P 不是 一個日期值:
mysql> SELECT PERIOD_ADD(9801,2);
-> 199803

PERIOD_DIFF(P1,P2)
前往時代 P1 和 P2 之間的月數。P1 和 P2 應當以 YYMM 或 YYYYMM 指定。 留意,時代參數 P1 和 P2 不是 日期值:
mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11

DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
這些函數履行日期的算術運算。ADDDATE() 和 SUBDATE() 分離是 DATE_ADD() 和 DATE_SUB() 的同義詞。 在 MySQL 3.23 中,假如表達式的左邊是一個日期值或一個日期時光型字段,你可使用 + 和 – 取代 DATE_ADD() 和 DATE_SUB()(示例以下)。 參數 date 是一個 DATETIME 或 DATE 值,指定一個日期的開端。expr 是一個表達式,指定從開端日期上增長照樣減去距離值。expr 是一個字符串;它可以以一個 “-” 領頭表現一個負的距離值。type 是一個症結詞,它標記著表達式以何格局被說明。 下表顯示 type 和 expr 參數是若何聯系關系的: type 值 expr 希冀的格局
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
MONTH MONTHS
YEAR YEARS
MINUTE_SECOND “MINUTES:SECONDS”
HOUR_MINUTE “HOURS:MINUTES”
DAY_HOUR “DAYS HOURS”
YEAR_MONTH “YEARS-MONTHS”
HOUR_SECOND “HOURS:MINUTES:SECONDS”
DAY_MINUTE “DAYS HOURS:MINUTES”
DAY_SECOND “DAYS HOURS:MINUTES:SECONDS”
在 expr 的格局中,MySQL 許可任何字符作為定界符。表中所顯示的是建議的定界字符。假如 date 參數是一個 DATE 值,而且盤算的距離僅唯一 YEAR、MONTH 和 DAY 部門(沒有時光部門),那末前往值也是一個 DATE 值。不然前往值是一個 DATETIME 值:
mysql> SELECT “1997-12-31 23:59:59″ + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + “1997-12-31″;
-> 1998-01-01
mysql> SELECT “1998-01-01″ – INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD(”1997-12-31 23:59:59″,
-> INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD(”1997-12-31 23:59:59″,
-> INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD(”1997-12-31 23:59:59″,
-> INTERVAL “1:1″ MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB(”1998-01-01 00:00:00″,
-> INTERVAL “1 1:1:1″ DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD(”1998-01-01 00:00:00″,
-> INTERVAL “-1 10″ DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB(”1998-01-02″, INTERVAL 31 DAY);
-> 1997-12-02

假如你指定了一個太短的距離值(沒有包含 type 症結詞所希冀的一切距離部門),MySQL 假定你漏掉了距離值的最右邊部門。例如,假如指定一個 type 為 DAY_SECOND,那末 expr 值被希冀包括天、小時、分鐘和秒部門。假如你象 “1:10″ 樣指定一個值,MySQL 假定天和小時部門被漏掉了,指定的值代表分鐘和秒。換句話說,”1:10″ DAY_SECOND 被說明為等價於 “1:10″ MINUTE_SECOND。這相似於 MySQL 說明 TIME 值為經由的時光而不是一天的時辰。留意,假如依著包括一個時光部門的距離增長或削減一個日期值,該日期值將被主動地轉換到一個日期時光值:

mysql> SELECT DATE_ADD(”1999-01-01″, INTERVAL 1 DAY);
-> 1999-01-02
mysql> SELECT DATE_ADD(”1999-01-01″, INTERVAL 1 HOUR);
-> 1999-01-01 01:00:00

假如你應用了肯定不准確的日期,前往成果將是 NULL。假如你增長 MONTH、YEAR_MONTH 或 YEAR,而且成果日期的天比新月份的最年夜天數還年夜,那末它將被調劑到新月份的最年夜天數:
mysql> SELECT DATE_ADD('1998-01-30′, INTERVAL 1 MONTH);
-> 1998-02-28

留意,下面的例子中,單詞 INTERVAL 和症結詞 type 是不辨別字母年夜小寫的。

EXTRACT(type FROM date)
EXTRACT() 函數應用與 DATE_ADD() 或 DATE_SUB() 分歧的距離類型,然則它用於指定從日期中提取的部門,而不是停止日期算術運算。
mysql> SELECT EXTRACT(YEAR FROM “1999-07-02″);
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM “1999-07-02 01:02:03″);
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM “1999-07-02 01:02:03″);
-> 20102

TO_DAYS(date)
給出一個日期 date,前往一個天數(從 0 年開端的天數):
mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS('1997-10-07′);
-> 729669

TO_DAYS() 有意於應用先於格裡高裡歷法(即現行的陽歷)(1582)湧現的值,由於它不斟酌當歷法轉變時所遺掉的天數。

FROM_DAYS(N)
給出一個天數 N,前往一個 DATE 值:
mysql> SELECT FROM_DAYS(729669);
-> ‘1997-10-07′

FROM_DAYS() 有意於應用先於格裡高裡歷法(1582)湧現的值,由於它不斟酌當歷法轉變時所遺掉的天數。

DATE_FORMAT(date,format)
按照 format 字符串格局化 date 值。上面的潤飾符可被用於 format 字符串中: 潤飾符 寄義
%M 月的名字 (January..December)
%W 禮拜的名字 (Sunday..Saturday)
%D 有英文後綴的某月的第幾天 (0th, 1st, 2nd, 3rd, etc.)
%Y 年份,數字的,4 位
%y 年份,數字的,2 位
%X 周值的年份,禮拜日是一個禮拜的第一天,數字的,4 位,與 ‘%V' 一同應用
%x 周值的年份,禮拜一是一個禮拜的第一天,數字的,4 位,與 ‘%v' 一同應用
%a 縮寫的禮拜名 (Sun..Sat)
%d 月份中的天數,數字的 (00..31)
%e 月份中的天數,數字的 (0..31)
%m 月,數字的 (00..12)
%c 月,數字的 (0..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 禮拜 (00..53),禮拜日是一個禮拜的第一天
%u 禮拜 (00..53),禮拜一是一個禮拜的第一天
%V 禮拜 (01..53),禮拜日是一個禮拜的第一天。與 ‘%X' 一路應用
%v 禮拜 (01..53),禮拜一是一個禮拜的第一天。與 ‘%x' 一路應用
%% 一個字母 “%”
一切其它的字符不經由說明,直接復制到成果中:
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00′, ‘%W %M %Y');
-> ‘Saturday October 1997′
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00′, ‘%H:%i:%s');
-> ‘22:23:00′
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00′,
‘%D %y %a %d %m %b %j');
-> ‘4th 97 Sat 04 10 Oct 277′
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00′,
‘%H %k %I %r %T %S %w');
-> ‘22 22 10 10:23:00 PM 22:23:00 00 6′

mysql> SELECT DATE_FORMAT('1999-01-01′, ‘%X %V');
-> ‘1998 52′

在 MySQL 3.23 中,在格局潤飾符前須要字符 `%'。在更早的 MySQL 版本中,`%' 是可選的。 月份與天潤飾符的規模從零開端的緣由是,在 MySQL 3.23 中,它許可存儲不完美的日期值(例如 ‘2004-00-00′)。

TIME_FORMAT(time,format)
它的應用辦法與下面的 DATE_FORMAT() 函數類似,然則 format 字符串只包括處置小時、分和秒的那些格局潤飾符。應用其它的潤飾符會發生一個 NULL 值或 0。

CURDATE()
CURRENT_DATE
以 ‘YYYY-MM-DD' 或 YYYYMMDD 格局前往以後的日期值,前往的格局取決於該函數是用於字符串照樣數字語境中:
mysql> SELECT CURDATE();
-> ‘1997-12-15′
mysql> SELECT CURDATE() + 0;
-> 19971215

CURTIME()
CURRENT_TIME
以 ‘HH:MM:SS' 或 HHMMSS 格局前往以後的時光值,前往的格局取決於該函數是用於字符串照樣數字語境中:
mysql> SELECT CURTIME();
-> ‘23:50:26′
mysql> SELECT CURTIME() + 0;
-> 235026

NOW()
SYSDATE()
CURRENT_TIMESTAMP
以 ‘YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格局前往以後的日期時光值,前往的格局取決於該函數是用於字符串照樣數字語境中:
mysql> SELECT NOW();
-> ‘1997-12-15 23:50:26′
mysql> SELECT NOW() + 0;
-> 19971215235026

留意,函數 NOW() 在每一個查詢中只盤算一次,也就是在查詢開端履行時。這就是說,假如在一個零丁的查詢中屢次援用了 NOW(),它只會給出值都是一個雷同的時光。

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
假如挪用時沒有參數,以無符號的整數情勢前往一個 Unix 時光戳(從 ‘1970-01-01 00:00:00′ GMT 開端的秒數)。假如以一個參數 date 挪用 UNIX_TIMESTAMP(),它將前往該參數值從 ‘1970-01-01 00:00:00′ GMT 開端經由的秒數值。date 可所以一個 DATE 字符串,一個 DATETIME 字符串,一個 TIMESTAMP,或許以一個 YYMMDD 或 YYYYMMDD 顯示的當地時光:
mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00′);
-> 875996580

當 UNIX_TIMESTAMP 被用於一個 TIMESTAMP 列時,函數直接前往一個外部的時光戳值,而不停止一個隱含地 “string-to-unix-timestamp” 轉換。假如你傳遞一個超越規模的日期參數給 UNIX_TIMESTAMP() ,它將前往 0,然則請留意,MySQL 對其僅僅停止根本的磨練(年規模 1970-2037,月份 01-12,日期 01-31)。 假如你願望減去 UNIX_TIMESTAMP() 列,你應當須要將成果強迫轉換為一有符號整數。檢查章節 6.3.5 Cast 函數。

FROM_UNIXTIME(unix_timestamp [,format])
以 ‘YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格局前往一個 unix_timestamp 參數值,前往值的情勢取決於該函數應用於字符串照樣數字語境。 假如 format 給出,前往值依 format 字符串被格局。format 可以包括與 DATE_FORMAT() 函數異樣的潤飾符。
mysql> SELECT FROM_UNIXTIME(875996580);
-> ‘1997-10-04 22:23:00′
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
‘%Y %D %M %h:%i:%s %x');
-> ‘1997 23rd December 03:43:30 1997′

SEC_TO_TIME(seconds)
以 ‘HH:MM:SS' 或 HHMMSS 格局前往參數 seconds 被轉換到時分秒後的值,前往值的情勢取決於該函數應用於字符串照樣數字語境:
mysql> SELECT SEC_TO_TIME(2378);
-> ‘00:39:38′
mysql> SELECT SEC_TO_TIME(2378) + 0;
-> 3938

TIME_TO_SEC(time)
將參數 time 轉換為秒數後前往:
mysql> SELECT TIME_TO_SEC('22:23:00′);
-> 80580
mysql> SELECT TIME_TO_SEC('00:39:38′);
-> 2378
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved