字符串函数
concat(S1,S2,…,SN) | 字符串连接,将多个字符串合并为一个字符串。遇null返回null。 |
---|
lower(str)/lcase(str) | 函数将字符串的所有字母转变为小写字符 |
upper(str)/ucae(str) | 函数将字符串的所有字母转变为大写字符 |
left(str,n) | 函数返回字符串str的前n个字符 |
right(str,n) | 函数返回字符串str的后n个字符 |
space(n) | 函数返回n个空格 |
length(str) | 函数计算字符串的字节长度。 |
ltrim(STR) | 函数将去掉字符串开始处的空格。 |
rtrim(STR) | 函数将去掉字符串结尾处的空格 |
trim(STR) | 函数将去掉字符串开始处和结尾处的空格 |
repeat(s,n) | 函数将字符串s重复n次 |
replace(s,s1,s2) | 函数将字符串s2替代字符串s中的字符串s1 |
strcmp(S1,S2) | 函数用来比较字符串s1和s2.如果s1大于s2,结果返回1;如果s1等于s2,结果返回0;如果s1小于s2,结果返回-1 |
substring(s,n,len) /mid(s,n,len) | 函数从字符串s的第n个位置开始获取长度为len的字符串。 |
locate(s1,s)/position(s1 in s)/insert(s,s1) | 这三个函数从字符串s中获取s1的开始位置 |
reverse(s) | 函数将字符串的顺序反过来 |
数值函数
abs(X) | 用来求绝对值 |
---|
ceil(X)/CEILING(X) | 返回大于或等于x的最小整数 |
floor(X) | 返回小于或等于x的最大整数 |
mod(X,Y) | 用来求余数 |
rand()/rand(X) | 这两个函数都是返回0~1的随机数。但是RAND()返回的随机数是完全随机的,而rand(x)函数的x值相同时,返回的值是相同的。 |
PI() | 用来返回圆周率 |
sqrt(x) | 用来求平方根 |
round(X) | 返回离x最近的整数,也就是对x进行四舍五入处理。 |
round(X,Y) | 返回x保留到小数点y位的值,截断时需要进行四舍五入处理 |
truncate(X,Y) | 截断,截取;返回x保留到小数点后y位的值 |
sign(x) | 函数返回x的符号,若x是负数,正数,0返回-1,1,0 |
pow(x,y)/power(x,y) | 这两个函数计算x的y次方,即xy |
exp(x) | 函数计算e的x次方,即ex |
log(x) | 函数计算x的自然对数 |
log10(x) | 函数计算以10为底的对数。其中EXP(x)和LOG(x)这两个函数互为反函数。 |
日期函数
curdate()/current_date() | 函数获取当前的日期 |
---|
curtime()/current_time() | 函数获取当前时间 |
now()/current_timestimp()/localtime()/sysdate() | 这四个函数表示相同的含义,都用来获取当前的日期和时间。 |
week(d)/weekofyear(d) | 函数都是计算日期d是本年的第几个星期。返回值的范围是1~53 |
dayofyear(d) | 函数返回日期d是本年的第几天 |
dayofmonth(d) | 函数返回日期d是本月的第几天 |
year(d) | 函数返回日期d中的年份值 |
month(d) | 函数返回日期d中的月份值,其取值范围是1~12 |
quarter(d) | 函数返回日期d是本年的第几季度,值的范围是1~4 |
hour(t) | 函数返回时间t中的小时值 |
minute(t) | 函数返回时间t中的分钟值 |
second(t) | 函数返回时间t中的秒钟值 |
monthname(d) | 函数返回日期d中月份的英文名称,如January,February等。 |
dayname(d) | 函数返回日期d是星期几,显示其英文民个,如Monday,Tuesday等。 |
dayofweek(d) | 函数返回日期d是星期几,1表示星期日,2表示星期一,依次类推。 |
weekday(d) | 函数返回日期d是星期几,0表示星期一,1表示星期二,依次类推。 |
extract(type from d) | 函数从日期d中获取指定的值。这个值是什么由type的值来决定。Type的值可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND |
to_days(d) | 给定一个日期,返回一个从0年开始的天数 |
from_days(n) | 给定一个天数,返回一个日期 |
adddate(date,interval expr type) | 在date日期的基础上增加或减少指定的时间间隔 |
subdate(date,interval expr type) | 在date日期的基础上增加或减少指定的时间间隔 |
addtime(t,seconds) | 在time时间的基础上增加指定的秒数 |
subtime(t,seconds) | 在time时间的基础上增加指定的秒数 |
datediff(d1,d2) | 返回d1-d2的天数 |
date_add(date,interval expr type) | 在date日期的基础上增加或减少指定的时间间隔 |
date_format(d,f) | 根据format字符串,格式化date值 |
time_format(t,f) | 根据format字符串,格式化time值 |
条件判断函数
If(expr,v1,v2) | 如果表达式expr为true,返回结果v1,否则返回v2 |
---|
Ifnull(v1,v2) | 如果v1为空,返回v2,否则返回v1 |
Case when expr1 then v1 else vn end | 搜索case函数 |
Case expr when e1 then v1 else vn end | 枚举case函数 |
练习—列转行统计数据
按照日期,分别统计小说和微信的总数。结果如下图:
![image-20211026224816232](https://img-blog.csdnimg.cn/img_convert/c1ed9f9b61511509b9f64645db4c273e.png)
SELECT Date ,
MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信
FROM TabName
GROUP BY Date
练习—行转列统计数据
执行以下语句:Select Date, group_concat(NAME,‘总量:’,Scount) as b_str from TabName group by Date
![image-20211026225411390](https://img-blog.csdnimg.cn/img_convert/1e34336cd11695cb9088be693b9eda6c.png)
系统信息函数
database() | 返回当前的数据库名 |
---|
version() | 函数返回数据库的版本号 |
user() | 返回当前的用户名 |
session_user() | 返回当前的用户名 |
system_user() | 返回当前的用户名 |
connection_id() | 函数返回服务器的连接数,也就是到现在为止MySQL服务的连接次数。 |
schema() | 返回当前的数据库名称 |
charset(str) | 函数返回字符串的字符集,一般情况下,这个字符集就是系统的默认字符集。 |
collation(str) | 函数返回字符串中的字符排列方式 |
last_insert_id() | 函数返回最后生成的AUTO_INCREMENT的值 |
其他函数
ascll(s) | 返回字符串s的第一个字符的ASCII码 |
---|
char(digit) | 返回ASCII对应的字符 |
convert(s USING cs) | 函数将字符串s的字符集变成cs,例如: Mysql>select charset(‘ABC’),charset(convert(‘ABC’ using gbk)); |
cast(x AS type)/convert(x,type) | 这两个函数将x变成type类型。这两个函数只对BINARY,CHAR,DATE,DATETIME,TIME,SIGNED INTEGER,UNSIGNED INTEGER这些类型起作用 |
get_lock(name,time) | 函数定义一个名称为name,持续时间长度为time秒的锁.如果锁定成功返回1;如果尝试超时,返回0;如果遇到错误,返回NULL |
release_lock(name) | 函数解除名称为name的锁.如果解锁成功,返回1;如果尝试超时,返回0;如果解锁失败,返回NULL |
is_free_lock(name) | 函数判断是否使用名为name的锁.如果使用,返回0,否则返回 1 |