MySQL的常用函数

一、字符串函数

函数 描述
CONCAT(s1,s2,....,sn) 连接s1,s2,...,sn为一个字符串
CONCAT_WS(separator,s1,s2,...,sn) 连接s1一直到sn,并且中间以separator作为分隔符
CHAR_LENGTH(s) 返回字符串s的字符数
LENGTH(s) 返回字符串s的字节数,和字符集有关
INSERT(str,index,len,instr) 将字符串str从第index位置开始,len个字符长的子串替换为字符串instr
UPPER(s)或UCASE(s) 将字符串s的所有字母转换成大写字母
LOWER(s)或LCASE(s) 将字符串s的所有字母转换成小写字母
LEFT(s,n) 返回字符串s最左边的n个字符
RIGHT(s,n) 返回字符串s最右边的n个字符
LPAD(str,len,pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str,len,pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符
LTRIM(s) 去掉字符串s左侧的空格
RTRIM(s) 去掉字符串s右侧的空格
TRIM(s) 去掉字符串s开始与结尾的空格
TRIM([BOTH] s1 FROM s) 去掉字符串s开始与结尾的s1
TRIM([LEADING] s1 FROM s) 去掉字符串s开始处的s1
TRIM([TRAILING] s1 FROM s) 去掉字符串s结尾处的s1
REPEAT(str,n) 返回str重复n次的结果
REPLACE(str,a,b) 用字符串b替换字符串str中所有出现的字符串a
STRCMP(s1,s2) 比较字符串s1,s2
SUBSTRING(s,index,len) 返回从字符串s的index位置的len个字符
-- 用户表
CREATE TABLE t_user (
  id INT(11) NOT NULL AUTO_INCREMENT,
  uname VARCHAR(40) DEFAULT NULL,
  age INT(11) DEFAULT NULL,
  sex INT(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

INSERT  INTO t_user VALUES (NULL,'zs',18,1);
INSERT  INTO t_user VALUES (NULL,'ls',20,0);
INSERT  INTO t_user VALUES (NULL,'ww',23,1);
INSERT  INTO t_user VALUES (NULL,'zl',24,1);
INSERT  INTO t_user VALUES (NULL,'lq',15,0);
INSERT  INTO t_user VALUES (NULL,'hh',12,0);
INSERT  INTO t_user VALUES (NULL,'wzx',60,NULL);
INSERT  INTO t_user VALUES (NULL,'lb',NULL,NULL);

-- 1. 使用concat函数显示出  你好,uname 的结果
SELECT CONCAT("你好,",uname) FROM t_user

-- 2. 使用concat_ws函数显示出 你好,uname ,很高兴认识你的结果
SELECT CONCAT_WS(",","你好",uname,"很高兴认识你") FROM t_user

-- 3. 将字符串hello 转换为大写显示
SELECT UPPER("hello")

-- 4. 查询所有用户名,将用户名显示为大写
SELECT UPPER(uname) FROM t_user

-- 5. 查询所有用户名,去掉左右两端的空格
SELECT TRIM(uname) FROM t_user

-- 6. 获取 hello,world 从第二个字符开始的完整子串
SELECT SUBSTRING("hello,world",2)

-- 7. 获取hello,world 从第二个字符开始但是长度为4的子串
SELECT SUBSTRING("hello,world",2,4)

二、数值函数

函数 用法
ABS(x) 返回x的绝对值
CEIL(x) 返回大于x的最小整数值
FLOOR(x) 返回小于x的最大整数值
MOD(x,y) 返回x/y的模
RAND() 返回0~1的随机值
ROUND(x,y) 返回参数x的四舍五入的有y位的小数的值
TRUNCATE(x,y) 返回数字x截断为y位小数的结果
SQRT(x) 返回x的平方根
POW(x,y) 返回x的y次方
-- 数值函数
-- 1. 获取-12的绝对值
SELECT ABS(-12)

-- 2. 将-11.2向上取整
SELECT CEIL(-11.2)

-- 3. 将1.6向下取整
SELECT FLOOR(1.6)

-- 4. 获得2的32次幂的值
SELECT POW(2,32)

-- 5. 获得一个在0~100之间的随机数
SELECT RAND()*100

-- 获取1~100的随机整数
SELECT CEIL(RAND()*100)

三、日期函数

函数 用法
CURDATE()或CURRENT_DATE() 返回当前日期
CURTIME()或CURRENT_TIME() 返回当前时间
NOW()/SYSDATE()/CURRENT_TIMESTAMP()/LOCALTIME()/LOCALTIMESTAMO() 返回当前系统日期时间
YEAR(date)/MONTH(date)/DAY(date)/HOUR(time)/MINUTE(time)/SECOND(time) 返回具体的时间值
WEEK(date)/WEEKOFYEAR(date) 返回一年中的第几周
DAYOFWEEK() 返回今天是一周的第几天,注意:周日是1,周一是2,...周六是7
WEEKDAY(date) 返回周几,注意,周一是0,周二是1,...周日是6
DAYNAME(date) 返回星期:MONDAY,TUESDAY,...SUNDAY
MONTHNAME(date) 返回月份:January,....
DATEDIFF (date1,date2)/TIMEDIFF(time1,time2) 返回date1-date2的日期间隔、返回time1-time2的时间间隔
DATE_ADD(datetime,INTERVAL exprtype) 返回与给定日期时间相差INTERVAL时间段的日期时间
DATE_FORMAT(datetime.fmt) 按照字符串fmt格式化日期datetime值
STR_TO_DATE(str,fmt) 按照字符串fmt对str进行解析,解析为一个日期
格式符 说明
%Y 4位数字表示年份
%y 表示两位数字表示年份
%M 月名表示月份(January,...)
%m 两位数字表示月份(01,02,03...)
%b 缩写的月名(Jan,Feb,...)
%c 数字表示月份(1,2,3...)
%D 英文后缀表示月中的天数(1st,2nd,3rd...)
%d 两位数字表示月中的天数(01,02...)
%e 数字形式表示月中的天数(1,2,3,4,5...)
%H 两位数字表示小数,24小时制(01,02...)
%h和%I 两位数字表示小时,12小时制(01,02...)
%k 数字形式的小时,24小时制(1,2,3...)
%I 数字形式表示小时,12小时制(1,2,3,4...)
%i 两位数字表示分钟(00,01,02)
%S和%s 两位数字表示秒(00,01,02...)
%W 一周中的星期名称(Sunday....)
%a 一周中的星期缩写(Sun,Mon,Tues,...)
%w 以数字表示周中的天数(0=Sunday,1=Monday...)
%j 以3位数字表示年中的天数(001,002...)
%U 以数字表示年中的第几周(1,2,3...),其中Sunday为周中第一天
%u 以数字表示年中的第几周(1,2,3...)其中Monday为周中第一天
%T 24小时制
%r 12小时制
%p AM或PM
%% 表示%
-- 日期函数
-- 1. 将当前时间转成字符串
SELECT DATE_FORMAT(LOCALTIME(),"%Y-%m-%d %H:%i:%S")

-- 2. 获取当前日期
SELECT CURDATE()

-- 3. 获取当前时间
SELECT CURTIME()

-- 4. 获取当前的日期时间
SELECT NOW()

-- 5. 获取到元旦还有多少天
SELECT DATEDIFF("2023-01-01",NOW())

-- 6. 一年后的现在的日期时间
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)

四、流程函数

函数 用法
IF(value,t,f) 如果value是真,返回t,否则返回f
IFNULL(value1,value2) 如果value1不为空,返回value1,否则返回value2
CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2...[ELSE result] END 相当于Java中的if..else if ...else...
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 ... [ELSE 值n ] END 相当于Java中的switch ... case ...
-- 流程函数
-- 1. 获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询
SELECT uname,IF(sex=1,1,0) FROM t_user

-- 2. 获取用户的姓名、性别,如果性别为null则显示为1:要求使用ifnull函数查询
SELECT uname,IFNULL(sex,1) FROM t_user

-- 3. 查询用户的年龄,如果年龄<=12岁就是儿童,<=18岁就是少年,<=40岁就是中年,其他就是老年
-- 使用case when进行查询到的内容是单独作为一个字段存在的,所以跟其他字段要用逗号,分割
SELECT uname,age,CASE WHEN IFNULL(age,0)<=12 THEN '儿童'
              WHEN age<=18 THEN '少年'
              WHEN age<=40 THEN '中年'
              ELSE '老年' END "描述"
FROM t_user

五、其他函数

函数 用法
database() 返回当前数据库名
version() 返回当前数据库版本
user() 返回当前登录用户名
password(str) 返回字符串str的加密版本,41位长的字符串
md5(str) 返回字符串str的md5值,也是一种加密方式

学海无涯苦作舟

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容