一、数值函数
1.算术操作符
函数 | 说明 | 示例 |
---|---|---|
+ | 加号 | exp:select 3+5; result:8 |
- | 减号 | exp:select -3; result:-3 |
* | 乘号 | exp:select 3*5; result:15 |
/ | 除号 | exp:select 3/5; result:0.60 |
DIV | 整数除法 | exp:select 5 DIV 2; result:2 |
2.数学函数
函数 | 说明 | 示例 |
---|---|---|
ABS(X) | 返回X的绝对值 | mysql> SELECT ABS(2); -> 2 |
ACOS(X) | 返回X的反余弦。若X不在-1到1的范围之内,则返回 NULL 。 | mysql> SELECT ACOS(1); -> 0 |
ASIN(X) | 返回X的反正弦。若X不在-1到1的范围之内,则返回 NULL 。 | mysql> SELECT ASIN(0.2); -> 0.20135792079033 |
ATAN(X) | 返回X的反正切。 | mysql> SELECT ATAN(2); -> 1.1071487177941 |
ATAN(Y,X), ATAN2(Y,X): | 返回两个变量X及Y以弧度表示的反正切。 扩展:双变量反正切函数是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。 | mysql> SELECT ATAN(-2,2); -> -0.78539816339745 mysql> SELECT ATAN2(PI(),0); -> 1.5707963267949 |
CEILING(X) CEIL(X) | 返回不小于X 的最小整数值 | mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEIL(-1.23); -> -1 |
COS(X) | 返回X 的余弦 | mysql> SELECT COS(PI()); -> -1 |
COT(X) | 返回X 的余切 | mysql> SELECT COT(12); -> -1.5726734063977 |
CRC32(expr) | 计算循环冗余码校验值并返回一个 32比特无符号值。若参数为NULL ,则结果为 NULL。该参数应为一个字符串,而且在不是字符串的情况下会被作为字符串处理(若有可能)。
| mysql> SELECT CRC32('MySQL'); -> 3259397556 |
DEGREES(X) | 把弧度被转化为度 | mysql> SELECT DEGREES(PI()); -> 180 |
EXP(X) | 返回e的X乘方后的值(自然对数的底) | mysql> SELECT EXP(2); -> 7.3890560989307 |
FLOOR(X) | 回不大于X的最大整数值 | mysql> SELECT FLOOR(1.23); -> 1 |
FORMAT(X,D) | 将数字X 的格式写成'#,###,###.##'格式, 即保留小数点后 D位,而第D位的保留方式为四舍五入,然后将结果以字符串的形式返回。 | mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235' |
LN(X) | 返回X的自然对数,即X相对于基数e的对数。 | mysql> SELECT LN(2); -> 0.69314718055995 |
LOG(X) LOG(B,X) | 若用一个参数调用,这个函数就会返回X的自然对数。 若用两个参数进行调用,这个函数会返回X对于任意基数B的对数。 LOG(B,X) 就相当于 LOG(X) / LOG(B)。 | mysql> SELECT LOG(2); -> 0.69314718055995 mysql> SELECT LOG(10,100); -> 2 |
LOG2(X) | 返回X 的基数为2的对数。 对于查出存储一个数字需要多少个比特,LOG2()非常有效。这个函数相当于表达式 LOG(X) / LOG(2)。 | mysql> SELECT LOG2(65536); -> 16 |
LOG10(X) | 返回X的基数为10的对数。 LOG10(X)相当于LOG(10,X)。 | mysql> SELECT LOG10(100); -> 2 |
MOD(N,M), N % M, N MOD M | 模操作。返回N 被 M除后的余数。 MOD() 对于带有小数部分的数值也起作用, 它返回除法运算后的精确余数: | mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(34.5,3); -> 1.5
|
PI() | 返回 ϖ (pi)的值。默认的显示小数位数是7位,然而 MySQL内部会使用完全双精度值。 | mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116 |
POW(X,Y) , POWER(X,Y) | 返回X 的Y乘方的结果值。 | mysql> SELECT POW(2,2); -> 4 mysql> SELECT POW(2,-2); -> 0.25 |
RADIANS(X) | 返回由度转化为弧度的参数 X, (注意 ϖ 弧度等于180度)。 | mysql> SELECT RADIANS(90); -> 1.5707963267949 |
RAND() RAND(N) | 返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。 若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 注意,在WHERE语句中,WHERE每执行一次, RAND()就会被再计算一次。 | mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 |
ROUND(X) ROUND(X,D) | 返回参数X, 其值接近于最近似的整数。在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入。若要接保留X值小数点左边的D 位,可将 D 设为负值。 | mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(23.298, -1); -> 20 |
SIGN(X) | 返回参数作为-1、 0或1的符号,该符号取决于X 的值为负、零或正。 | mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1 |
SIN(X) | 返回X 正弦,其中 X 在弧度中被给定。 | mysql> SELECT SIN(PI()); -> 1.2246063538224e-16 |
SQRT(X) | 返回非负数X 的二次方根。 | mysql> SELECT SQRT(4); -> 2 |
TAN(X) | 返回X 的正切,其中X 在弧度中被给定。 | mysql> SELECT TAN(PI()); -> -1.2246063538224e-16 |
TRUNCATE(X,D) | 返回被舍去至小数点后D位的数字X。若D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将D设为负数,若要截去(归零) X小数点左起第D位开始后面所有低位的值. | mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9 mysql> SELECT TRUNCATE(122,-2); -> 100 mysql> SELECT TRUNCATE(10.28*100,0); -> 1028 |
二、日期和时间函数
函数 | 说明 | 示例 |
---|---|---|
ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days) | 计算其实日期d加上n天的日期。 当被第二个参数的INTERVAL格式激活后, ADDDATE()就是DATE_ADD()的同义词。相关函数SUBDATE() 则是DATE_SUB()的同义词。 若 days 参数只是整数值,则 MySQL 5.1将其作为天数值添加至 expr。 | mysql>SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' mysql>SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' mysql> SELECT ADDDATE('1998-01-02', 31); -> '1998-02-02' |
ADDTIME(expr,expr2) | ADDTIME()将 expr2添加至expr 然后返回结果。 expr 是一个时间或时间日期表达式,而expr2 是一个时间表达式。 | mysql>SELECT ADDTIME('1997-12-31 23:59:59.999999', '1 1:1:1.000002'); -> '1998-01-02 01:01:01.000001' |
CONVERT_TZ(dt,from_tz,to_tz) | CONVERT_TZ() 将时间日期值dt 从from_tz 给出的时区转到to_tz给出的时区,然后返回结果值。 | mysql>SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); -> '2004-01-01 13:00:00' mysql>SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); -> '2004-01-01 22:00:00' |
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 |
CURRENT_TIMESTAMP(), NOW(), LOCALTIME(), LOCALTIMESTAMP(), | 返回当前日期和时间值,其格式为 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS , 具体格式取决于该函数是否用在字符串中或数字语境中。 | mysql> SELECT NOW(); ->2014-12-17 15:59:02 |
DATE(expr) | 提取日期或时间日期表达式expr中的日期部分。 | mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31' |
DATEDIFF(expr,expr2) | DATEDIFF() 返回起始时间 expr和结束时间expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。 | mysql>SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql>SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31 |
DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) | 这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。 type 为关键词,它指示了表达式被解释的方式。 若 date 参数是一个 DATE 值,而你的计算只会包括 YEAR、MONTH和DAY部分(即, 没有时间部分), 其结果是一个DATE 值。否则,结果将是一个 DATETIME值。 若位于另一端的表达式是一个日期或日期时间值 , 则INTERVAL expr type只允许在 + 操作符的两端。对于 –操作符, INTERVAL expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。 假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值: | 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' mysql>SELECT DATE_ADD('1992-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND); -> '1993-01-01 00:00:01.000001' mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR); -> '1999-01-01 01:00:00' |
DATE_FORMAT(date,format) | 根据format 字符串安排date 值的格式。 | 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' |
DAY() DAYOFMONTH() | 返回date 对应的该月日期,范围是从 1到31。 | mysql> SELECT DAYOFMONTH('1998-02-03'); -> 3 |
DAYNAME(date) | 返回date 对应的工作日名称。 | mysql> SELECT DAYNAME('1998-02-05'); -> '周四' |
DAYOFWEEK(date) | 返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。 | mysql> SELECT DAYOFWEEK('1998-02-03'); -> 3 |
DAYOFYEAR(date) | 返回date 对应的一年中的天数,范围是从 1到366。 | mysql> SELECT DAYOFYEAR('1998-02-03'); -> 34 |
EXTRACT(type FROM date) | 从日期中提取其部分 | 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 mysql> SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.00123'); -> 123 |
FROM_DAYS(N) | 给定一个天数 N, 返回一个DATE值。 使用 FROM_DAYS()处理古老日期时,务必谨慎。他不用于处理阳历出现前的日期(1582)。 | mysql> SELECT FROM_DAYS(729669); -> '1997-10-07' |
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp, format) | 返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。 | 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'); -> '2003 6th August 06:22:58 2003' |
GET_FORMAT(DATE|TIME| DATETIME,'EUR'|'USA' |'JIS'|'ISO'|'INTERNAL') | 返回一个格式字符串。这个函数在同DATE_FORMAT() 及STR_TO_DATE()函数结合时很有用。 | mysql>SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR')); -> '03.10.2003' mysql>SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA')); -> '2003-10-31' |
HOUR(time) | 返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23 。 然而, TIME 值的范围实际上非常大, 所以HOUR可以返回大于23的值。 | mysql> SELECT HOUR('10:05:03'); -> 10 mysql> SELECT HOUR('272:59:59'); -> 272 |
LAST_DAY(date) | 获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回NULL。 | mysql> SELECT LAST_DAY('2003-02-05'); -> '2003-02-28' mysql> SELECT LAST_DAY('2004-02-05'); -> '2004-02-29' mysql> SELECT LAST_DAY('2004-01-01 01:01:01'); -> '2004-01-31' mysql> SELECT LAST_DAY('2003-03-32'); -> NULL |
MAKEDATE(year,dayofyear) | 给出年份值和一年中的天数值,返回一个日期。dayofyear 必须大于 0 ,否则结果为 NULL。 | mysql>SELECT MAKEDATE(2001,31), MAKEDATE(2001,32); -> '2001-01-31', '2001-02-01' mysql>SELECT MAKEDATE(2001,365), MAKEDATE(2004,365); -> '2001-12-31', '2004-12-30' mysql> SELECT MAKEDATE(2001,0); -> NULL |
MAKETIME(hour,minute,second) | 返回由hour、 minute和second 参数计算得出的时间值。 | mysql> SELECT MAKETIME(12,15,30); -> '12:15:30' |
MICROSECOND(expr) | 从时间或日期时间表达式expr返回微秒值,其数字范围从 0到 999999。 | mysql>SELECT MICROSECOND('12:00:00.123456'); -> 123456 mysql>SELECT MICROSECOND('1997-12-31 23:59:59.000010'); -> 10 |
MINUTE(time) | 返回 time 对应的分钟数,范围是从 0 到 59。 | mysql> SELECT MINUTE('98-02-03 10:05:03'); -> 5 |
MONTH(date) | 返回date 对应的月份,范围时从 1 到 12 | mysql> SELECT MONTH('1998-02-03'); -> 2 |
MONTHNAME(date) | 返回date 对应月份的全名。 | mysql> SELECT MONTHNAME('1998-02-05'); -> 'February' |
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 |
QUARTER(date) | 返回date 对应的一年中的季度值,范围是从 1到 4。 | mysql> SELECT QUARTER('98-04-01'); -> 2 |
SECOND(time) | 返回time 对应的秒数, 范围是从 0到59。 | mysql> SELECT SECOND('10:05:03'); -> 3 |
SEC_TO_TIME(seconds) | 返回被转化为小时、 分钟和秒数的seconds参数值, 其格式为 'HH:MM:SS' 或HHMMSS | mysql> SELECT SEC_TO_TIME(2378); -> '00:39:38' mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938 |
STR_TO_DATE(str,format) | 这是DATE_FORMAT() 函数的倒转。它获取一个字符串 str 和一个格式字符串format。若格式字符串包含日期和时间部分,则 STR_TO_DATE()返回一个 DATETIME 值, 若该字符串只包含日期部分或时间部分,则返回一个 DATE 或TIME值。 str所包含的日期、时间或日期时间值应该在format指示的格式中被给定。对于可用在format中的说明符,请参见DATE_FORMAT() 函数说明表。 所有其它的字符被逐字获取,因此不会被解释。若 str 包含一个非法日期、时间或日期时间值,则 STR_TO_DATE()返回NULL。同时,一个非法值会引起警告。 | mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y'); -> '0000-00-00' mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); -> '2004-04-31' |
SUBDATE(date,INTERVAL expr type) SUBDATE(expr,days) | 当被第二个参数的 INTERVAL型式调用时, SUBDATE()和DATE_SUB()的意义相同。 第二个形式允许对days使用整数值。在这些情况下,它被算作由日期或日期时间表达式 expr中提取的天数。 | mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> '1997-12-02' mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31); -> '1997-12-02 12:00:00' |
SUBTIME(expr,expr2) | SUBTIME()从expr 中提取expr2 ,然后返回结果。expr 是一个时间或日期时间表达式,而expr2 是一个时间表达式。 | mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002'); -> '1997-12-30 22:58:58.999997' mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998'); -> '-00:59:59.999999' |
SYSDATE() | 返回当前日期和时间值,格式为'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS, 具体格式根据函数是否用在字符串或数字语境而定。 在一个存储程序或触发器中, SYSDATE()返回其执行的时间。这个NOW()的运作有所不同。 |
|
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开始的天数 )。 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。 对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。 | mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS('1997-10-07'); -> 729669 mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07'); -> 729669, 729669 |
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格式的数字。 假如你向UNIX_TIMESTAMP()传递一个溢出日期,它会返回 0,但请注意只有基本范围检查会被履行 (年份从1970 到 2037, 月份从01到12,日期从 01 到31)。 | mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); -> 875996580 |
UTC_DATE | 返回当前 UTC日期值,其格式为 'YYYY-MM-DD' 或 YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。 | mysql> SELECT UTC_DATE(), UTC_DATE() + 0; -> '2003-08-14', 20030814 |
UTC_TIME | 返回当前 UTC 值,其格式为 'HH:MM:SS' 或HHMMSS,具体格式根据该函数是否用在字符串或数字语境而定。 | mysql> SELECT UTC_TIME(), UTC_TIME() + 0; -> '18:07:53', 180753 |
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系统自变量的值。 | 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
0: 星期天 0-53 遇到本年的第一个星期天开始,是第一周,前面的计算为第0周。 1: 星期一 0-53 假如第一周能超过3天,那么计算为本年的第一周。否则为第0周。 2: 星期天 1-53 遇到本年的第一个星期天开始,是第一周。前面的计算为上年度的第5x周。 3: 星期一 1-53 假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周。 4: 星期天 0-53 假如第一周能超过3天,那么计算为本年的第一周。否则为第0周。 5: 星期一 0-53 遇到本年的第一个星期一开始,是第一周。前面的计算为第0周。 6: 星期天 1-53 假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周。 7: 星期一 1-53 遇到本年的第一个星期一开始,是第一周。前面的计算为上年度的第5x周。
注意,假如有一个日期位于前一年的最后一周, 若你不使用2、3、6或7作为mode 参数选择,则MySQL返回 0: mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0); -> 2000, 0
假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。 mysql> SELECT WEEK('2000-01-01',2); -> 52 |
WEEKDAY(date) | 回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 | 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 |