1. 程式人生 > >mysql中如何獲取年、月、日及本週是一年中的第幾周??

mysql中如何獲取年、月、日及本週是一年中的第幾周??

select year(curdate()),month(curdate()),day(curdate());

select weekofyear(curdate());

有點細微的差別,weekofyear(date)相當於week(date,3).
下面是week(date,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 本年度中有一個週一

select date_format(now(),'%Y')

select date_format(now(),'%m')

select date_format(now(),'%e')

select date_format(now(),'%U')

select year(curdate()),month(curdate()),dayofyear(curdate()),weekofyear(curdate());

◆ TIME(expr)

提取一個時間或日期時間表達式的時間部分,並將其以字串形式返回。

mysql> SELECT TIME('2003-12-31 01:02:03');
-> '01:02:03'
mysql> SELECT TIME('2003-12-31 01:02:03.000123');
-> '01:02:03.000123'

◆ TIMEDIFF(expr,expr2)

TIMEDIFF() 返回起始時間 expr 和結束時間expr2 之間的時間。 expr 和expr2 為時間或 date-and-time 表示式,兩個的型別必須一樣。

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
->                 '2000:01:01 00:00:00.000001');
-> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
->                 '1997-12-30 01:01:01.000002');
-> '46:58:57.999999'

◆ TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

對於一個單引數,該函式將日期或日期時間表達式 expr 作為日期時間值返回.對於兩個引數, 它將時間表達式 expr2 新增到日期或日期時間表達式 expr 中,將theresult作為日期時間值返回。

mysql> SELECT TIMESTAMP('2003-12-31');
-> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
-> '2004-01-01 00:00:00'

◆ TIMESTAMPADD(interval,int_expr,datetime_expr)

將整型表示式int_expr 新增到日期或日期時間表達式 datetime_expr中。 int_expr 的單位被時間間隔引數給定,該引數必須是以下值的其中一個: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

可使用所顯示的關鍵詞指定Interval值,或使用SQL_TSI_字首。例如, DAY或SQL_TSI_DAY 都是正確的。

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
-> '2003-01-02 00:01:00'
mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
-> '2003-01-09'

◆ TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

返回日期或日期時間表達式datetime_expr1 和datetime_expr2the 之間的整數差。其結果的單位由interval 引數給出。interval 的法定值同TIMESTAMPADD()函式說明中所列出的相同。

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1

◆ TIME_FORMAT(time,format)

其使用和 DATE_FORMAT()函式相同, 然而format 字串可能僅會包含處理小時、分鐘和秒的格式說明符。其它說明符產生一個NULL值或0。

若time value包含一個大於23的小時部分,則 %H 和 %k 小時格式說明符會產生一個大於0..23的通常範圍的值。另一個小時格式說明符產生小時值模數12。

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
-> '100 100 04 04 4'

◆ TIME_TO_SEC(time)

返回已轉化為秒的time引數。

mysql> SELECT TIME_TO_SEC('22:23:00');
-> 80580
mysql> SELECT TIME_TO_SEC('00:39:38');
-> 2378

◆ TO_DAYS(date)

給定一個日期date, 返回一個天數 (從年份0開始的天數 )。

mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS('1997-10-07');
-> 729669

TO_DAYS() 不用於陽曆出現(1582)前的值,原因是當日歷改變時,遺失的日期不會被考慮在內。

請記住, MySQL使用“日期和時間型別”中的規則將日期中的二位數年份值轉化為四位。例如,  '1997-10-07'和 '97-10-07' 被視為同樣的日期:

mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');
-> 729669, 729669

對於1582 年之前的日期(或許在其它地區為下一年 ), 該函式的結果實不可靠的。

◆ UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

若無引數呼叫,則返回一個Unix timestamp ('1970-01-01 00:00:00' GMT 之後的秒數) 作為無符號整數。若用date 來呼叫UNIX_TIMESTAMP(),它會將引數值以'1970-01-01 00:00:00' GMT後的秒數的形式返回。date 可以是一個DATE 字串、一個 DATETIME字串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。

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,但請注意只有基本範圍檢查會被履行 (年份從1970 到 2037, 月份從01到12,日期從  01 到31)。

假如你想要減去 UNIX_TIMESTAMP() 列, 你或許希望刪去帶符號整數的結果。

◆ UTC_DATE, UTC_DATE()

返回當前 UTC日期值,其格式為 'YYYY-MM-DD' 或 YYYYMMDD,具體格式取決於函式是否用在字串或數字語境中。

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> '2003-08-14', 20030814

◆ UTC_TIME, UTC_TIME()

返回當前 UTC 值,其格式為  'HH:MM:SS' 或HHMMSS,具體格式根據該函式是否用在字串或數字語境而定。

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> '18:07:53', 180753

◆ UTC_TIMESTAMP, UTC_TIMESTAMP()

返回當前UTC日期及時間值,格式為 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS,具體格式根據該函式是否用在字串或數字語境而定。

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> '2003-08-14 18:08:04', 20030814180804

◆ WEEK(date[,mode])

該函式返回date 對應的星期數。WEEK() 的雙引數形式允許你指定該星期是否起始於週日或週一, 以及返回值的範圍是否為從0 到53 或從1 到53。若 mode引數被省略,則使用default_week_format系統自變數的值。請參見5.3.3節,“伺服器系統變數”。

以下表說明了mode 引數的工作過程:

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

注意,假如有一個日期位於前一年的最後一週, 若你不使用2、3、6或7作為mode 引數選擇,則MySQL返回 0:

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0

有人或許會提出意見,認為 MySQL 對於WEEK() 函式應該返回 52 ,原因是給定的日期實際上發生在1999年的第52周。我們決定返回0作為代替的原因是我們希望該函式能返回“給定年份的星期數”。這使得WEEK() 函式在同其它從日期中抽取日期部分的函式結合時的使用更加可靠。

假如你更希望所計算的關於年份的結果包括給定日期所在周的第一天,則應使用 0、2、5或 7 作為mode引數選擇。

mysql> SELECT WEEK('2000-01-01',2);
-> 52

作為選擇,可使用 YEARWEEK()函式:

mysql> SELECT YEARWEEK('2000-01-01');
-> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'

◆ WEEKDAY(date)

返回date (0 = 週一, 1 = 週二, ... 6 = 週日)對應的工作日索引  weekday index for

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
-> 1
mysql> SELECT WEEKDAY('1997-11-05');
-> 2

◆ WEEKOFYEAR(date)

將該日期的陽曆周以數字形式返回,範圍是從1到53。它是一個相容度函式,相當於WEEK(date,3)。

mysql> SELECT WEEKOFYEAR('1998-02-20');
-> 8

◆ YEAR(date)

返回date 對應的年份,範圍是從1000到9999。

mysql> SELECT YEAR('98-02-03');
-> 1998

◆ YEARWEEK(date), YEARWEEK(date,start)

返回一個日期對應的年或周。start引數的工作同 start引數對 WEEK()的工作相同。結果中的年份可以和該年的第一週和最後一週對應的日期引數有所不同。

mysql> SELECT YEARWEEK('1987-01-01');
-> 198653

注意,週數和WEEK()函式隊可選引數0或 1可能會返回的(0) w有所不同,原因是此時 WEEK() 返回給定年份的語境中的周。