mysql函数
mysql函数:
1:字符串函数:根据,MySQL 会自动将数字转化为字符串,反之亦然。
转化为字符串:可使用 CAST()或 CONCAT()函数:
mysql> SELECT 38.8, CAST(38.8 AS CHAR);
-> 38.8, '38.8'
mysql> SELECT 38.8, CONCAT(38.8);
-> 38.8, '38.8'
CAST() 比较可取。
1.2:STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1 。
mysql> SELECT STRCMP('text', 'text2');
-> -1
mysql> SELECT STRCMP('text2', 'text');
-> 1
mysql> SELECT STRCMP('text', 'text');
-> 0
2:数值函数:
2.1 算数运算符:就 -、 +和 *而言, 若两个参数均为正数,则其计算结果的精确度为 BIGINT (64比特),若其中一个参数为无符 号整数, 而其它参数也是整数, 则结果为无符号整数。
2.2 数学函数;若发生错误,所有数学函数会返回 NULL 。
ABS(X):返回X 的绝对值。
ACOS(X):返回X 反余弦, 即, 余弦是X的值。若X 不在-1到 1的范围之内,则返回 NULL 。
ASIN(X):返回X 的反正弦,即,正弦为X 的值。若X 若X 不在-1到 1的范围之内,则返回 NULL 。
ATAN(X):返回X 的反正切,即,正切为X 的值。
CEILING(X) ;CEIL(X):返回不小于X 的最小整数值
COS(X):返回X 的余弦,其中X在弧度上已知。
COT(X):返回X 的余切。
CRC32(expr):计算循环冗余码校验值并返回一个 32比特无符号值。若参数为NULL ,则结果为 NULL。该参数应为一个字符串,而且在不是字符串的情况下会被作为字符串处理(若有可能)。
DEGREES(X):返回参数 X, 该参数由弧度被转化为度。
EXP(X):返回e的X乘方后的值(自然对数的底)。
FLOOR(X):返回不大于X的最大整数值 。
FORMAT(X,D):将数字X 的格式写成'#,###,###.##'格式, 即保留小数点后 D位,而第D位的保留方式为四舍五入,然后将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
LN(X):返回X 的自然对数,即, X 相对于基数e 的对数。这个函数同LOG(X)具有相同意义
LOG(B,X) 就相当于 LOG(X) / LOG(B)。
LOG2(X):返回X 的基数为2的对数。
LOG10(X):返回X的基数为10的对数。
MOD(N,M) , N % M ;N MOD M ;模操作。返回N 被 M除后的余数。
PI():返回 ϖ (pi)的值。默认的显示小数位数是7位,然而 MySQL内部会使用完全双精度值。
POW(X,Y) , POWER(X,Y):返回X 的Y乘方的结果值。
RADIANS(X):返回由度转化为弧度的参数 X, (注意 ϖ 弧度等于180度)。
RAND() RAND(N):返回一个随机浮点值 v ,范围在 0 到1 之间 (即, 其范围为 0 ≤ v ≤ 1.0)。若已指定一个整数参数 N ,则它被用作种子值,用来产生重复序列。ORDER BY RAND() LIMIT 1000
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。
ROUND(X) ROUND(X,D):返回参数X, 其值接近于最近似的整数。在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入。若要接保留X值小数点左边的D 位,可将 D 设为负值。
SIGN(X):返回参数作为-1、 0或1的符号,该符号取决于X 的值为负、零或正。
SIN(X):返回X 正弦,其中 X 在弧度中被给定。
SQRT(X):返回非负数X 的二次方根。
TAN(X):返回X 的正切,其中X 在弧度中被给定。
TRUNCATE(X,D):返回被舍去至小数点后D位的数字X。若D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将D设为负数,若要截去(归零) X小数点左起第D位开始后面所有低位的值.
3:时间与日期函数:
3.1:DATE_SUB() 函数从日期减去指定的时间间隔。
语法:DATE_SUB(date,INTERVAL expr type);
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:
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 * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); 查询一个月: select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time)
SUBDATE:
mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
第二个形式允许对days使用整数值。在这些情况下,它被算作由日期或日期时间表达式 expr中提取的天数。
3.2:DATEDIFF() 函数返回两个日期之间的天数。
CURDATE():
将当前日期按照'YYYY-MM-DD' 或YYYYMMDD 格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。
CURTIME():
将当前时间以'HH:MM:SS'或 HHMMSS 的格式返回, 具体格式根据函数用在字符串或是数字语境中而定。
DATE(expr):提取日期或时间日期表达式expr中的日期部分。
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'
DATE_ADD() 函数向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)
这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。 type 为关键词,它指示了表达式被解释的方式:
type 值 |
预期的 expr 格式 |
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MICROSECOND |
'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND |
'MINUTES.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
NOW() 返回当前的日期和时间。
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 位 |
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
EXTRACT(unit FROM date)
date 参数是合法的日期表达式。unit 参数可以是下列的值:
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 |
DAY(date) DAYNAME(date)
DAY() 和DAYOFMONTH()的意义相同。返回date 对应的工作日名称。
mysql> SELECT DAYNAME('1998-02-05');
-> '周四'
DAYOFMONTH(date)
返回date 对应的该月日期,范围是从 1到31。
mysql> SELECT DAYOFMONTH('1998-02-03');
-> 3
DAYOFWEEK(date)
返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。这些索引值符合 ODBC标准。
mysql> SELECT DAYOFWEEK('1998-02-03');
-> 3
DAYOFYEAR(date)
返回date 对应的一年中的天数,范围是从 1到366。
EXTRACT(type FROM date)
EXTRACT()函数所使用的时间间隔类型说明符同 DATE_ADD()或DATE_SUB()的相同,但它从日期中提取其部分,而不是执行日期运算。
HOUR(time):返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23 。
mysql> SELECT HOUR('10:05:03');
-> 10
然而, TIME 值的范围实际上非常大, 所以HOUR可以返回大于23的值。
LAST_DAY(date):获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回NULL。
mysql> SELECT LAST_DAY('2003-02-05');
-> '2003-02-28'
MAKEDATE(year,dayofyear):给出年份值和一年中的天数值,返回一个日期。dayofyear 必须大于 0 ,否则结果为 NULL。
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
-> '2001-01-31', '2001-02-01'
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
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值
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
-> '2004-04-31'
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'
TO_DAYS(date):给定一个日期date, 返回一个天数 (从年份0开始的天数 )。
mysql> SELECT TO_DAYS(950501);
-> 728779
WEEK(date[,mode]):
该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值
以下表说明了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 |
本年度中有一个周一 |
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
WEEKDAY(date):返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引
mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
-> 1
WEEKOFYEAR(date):将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。
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
加密函数:SHA1():该值被作为40位十六进制数字返回;
MD5():该值以32位十六进制数字的二进制字符串的形式返回;
其他函数:
sleep():睡眠;