4. MySQL SQL常见单行函数

SQL函数

主要有两种:单行函数、多行函数(分组函数、聚合函数)

一、单行函数

只对一行进行变换,每行返回一个结果。可以转换数据类型,可以嵌套参数可以是一列或一个值(对查询结果的每一行记录都有效,会影响每一行记录)。

二、多行函数(分组函数、聚合函数)

多行函数,每次对一组记录进行处理。然后对于这一组记录只返回一个结果。

dual

dual为了补全sql语句使用,但在MySQL中是无法查询出该表的(Qracle可以),在MySQL中dual是一个保留字。

select * from dual;

直接查询其内容会报错


image.png

而在Oracle中它是一张虚拟表,不能保存任何数据,只有一个字段(列),一行记录。当我们不希望从任何表中读取数据,就可以使用DUAL表。


单行函数详解

分类:
字符、数值、日期、控制、其他

1、字符函数
1)大小写转换函数

upper(str) 将str字符串转成全大写

select upper('hAHa') from dual;
image.png

lower(str) 将str字符串转成全小写

select lower('hAHa') from dual;
image.png
2)字符截取函数

SUBSTRING(str,n,len):获取子串函数
str:被截取的字符串
n:开始截取的位置 (以1位开始)
len:截取字符的个数
将str字符串从n位置起,截取len个字符
结果:字符类型

select substr('0123456', 3, 3) from dual;
image.png

查询emp表中,员工姓名前三个字母

select substr(ename,1,3) from emp;
image.png
3)字符查找函数

instr(str,str1):在str中寻找str1字符串,返回str1在str中的位置(第一个子字符串)
如果没找到,返回0
如果找到了,返回对应的位置(数值型)

select instr('I LIKE GIRL','I') from dual;
image.png
4)字符拼接函数

concat(str1,str2):将str1和str2拼接成一个字符串多个拼接

select concat('haha','hehe','xixi') from dual;
image.png

CONCAT_WS(x,s1,s2,…):字符串连接, x是其它参数的分隔符;

select CONCAT_WS('*','haha','hehe','xixi') from dual;
image.png
5)字符替换函数

replace(str1,str2,str3):在str1字符串中,使用str3来替换全部str2

select replace('ABCDECD','CD','HAHA') from dual;
image.png
6)字符串的长度函数

length(str):返回str字符串的字符个数

select length('abcde'), length('haha'),length('哈哈') from dual;
image.png

注意:如果想使中文和英文一样对待,可以使用char_length()。

select char_length('哈哈') from dual;
image.png
7)字符串补齐函数

lpad(str1,n1,str2)
rpad(str1,n1,str2)
lpad:将str1字符串使用str2在其左侧补充到n1个长度
rpad:将str1字符串使用str2在其右侧补充到n1个长度

select lpad('abc',6, '*'), rpad('abc',6, '*') from dual;
image.png
8)去除前后字符函数

trim函数能去掉字符的前后空格,或者去掉字符串中首尾特定字符(使用该方式需要使用到FROM关键字)

SELECT TRIM('H' FROM 'HelloHWorldHH') FROM dual;
image.png
SELECT TRIM(' HelloHWorldHH ') FROM dual;
image.png

2、数值函数
1)ROUND(n1,n2)

ROUND(x,y):返回保留小数点后面y位,四舍五入的整数;
将n1四舍五入,精确到小数点后n2位

select round(3.1415, 3), round(3.14, 0), round(6.14, -1) from dual;
image.png
2)TRUNCATE(x,y)

返回被舍弃的小数点后y位的数字x;
将n1数字舍弃,精确到小数点后n2位

select truncate(3.1415, 3), truncate(3.14, 0),truncate(6.14, -1) from dual;
image.png
3) MOD(n1,n2)

求n1除以n2后得到的余数——取余

select mod(5,3),mod(5,-3),mod(-5,3),mod(-5,-3) from dual;
image.png

3、日期函数
1)now()、sysdate()

now():获取的是MySQL服务器自身的时间戳
sysdate():获取的是系统的时间戳。

select sysdate() from dual;
select now() from dual;
image.png

image.png

注意:
当进行主从同步的时候,主库执行完一条语句,会把自己的数据库时间戳同步到备库上。这时候备库执行相同的语句会获得相同的时间戳,要是用sysdate(),就算数据库时间戳同步了也没用,因为取的是系统时间戳。所以,在实际开发应用中,尽量使用MySQL的 now()函数。

SELECT NOW(),CURDATE(),CURTIME() from dual;
image.png
2)TIMEDIFF、DATEDIFF

TIMEDIFF(expr1, expr2):返回两个时间相减相差的时间数;
DATEDIFF(expr1, expr2):返回两个日期相减相差的天数;

SELECT TIMEDIFF('2018-05-21 14:51:43','2018-05-19 12:54:43');
image.png

假设emp表中所有员工至今都未辞职,计算他们现在的司龄

select DATEDIFF(CURDATE(), hiredate)/365 from emp;
image.png
select year(CURDATE()) - year(hiredate) from emp;
image.png

注意:
1、计算员工的司龄,可以有精确到小数点后两位(不用四舍五入)方式,也可以采用四舍五入的方式。
2、利用时间的差值函数可以用于计算年龄,司龄,工龄等这些类似的随着时间流逝会改变的数据。

3)DATE_ADD、DATE_SUB

DATE_ADD(date,INTERVAL expr type):日期加上一个时间间隔值;
DATE_SUB(date,INTERVAL expr type):日期减去一个时间间隔值;
date:基础日期时间
expr:追加数值
type:追加的日期时间数值的日期时间类型

注意:为date时间,追加d1个月 结果还是一个日期

设公司试用期为6个月,计算emp中员工,计算转正日期

select DATE_ADD(hiredate,INTERVAL 6 month) from emp;
image.png

查询工龄大于或等于35年的员工信息。

SELECT * FROM emp e 
WHERE e.hiredate <= DATE_SUB(SYSDATE(),INTERVAL 35 YEAR);
image.png
4)last_day

last_day(date1)
date1:所在月份最后一天的日期 (结果类型:日期)

select ename, hiredate, last_day(hiredate) from emp;
image.png
5)两个日期之间的天数

两个日期之间直接做减法,能够获得两个日期之间天数的差

注意:不要减反,否则结果为负数

select now(), last_day(now()), last_day(now()) - now() as A, 
now() -last_day(now()) as B
from dual;
image.png
7)truncate

TRUNCATE(x,y):返回被舍弃的小数点后y位的数字x;

查询81年入职的员工姓名,入职日期按月截断的日期。

SELECT empno, hiredate,
truncate(hiredate, 'MONTH')
FROM emp
WHERE SUBSTR(hiredate,3,2)='81';
8) extract

EXTRACT(unit FROM date):从日期中抽取出某个单独的部分或组合

查询部门中所有员工入职月份

SELECT ename, hiredate, extract(month from hiredate) MONTH
FROM emp;
image.png
9)日期和时间格式化的函数

DATE_FORMAT(date,format)
TIME_FORMAT(time,format)

根据format 指定的格式显示日期或者时间值。
date 参数是合法的日期
format 规定日期/时间的输出格式

select date_format(now(), '%Y-%m-%d %H:%i;%s'), 
time_format(curtime(), '%H:%i:%s')
from dual;
image.png

4、流程控制语句
5)case
SELECT CASE WHEN 1>0 
THEN 'true' 
ELSE 'false' END 
from dual;
image.png
SELECT CASE 2 
WHEN 1 THEN 'one'
WHEN 2 THEN 'two' 
ELSE 'more' END
from dual;
image.png
2)if
SELECT IF(1<2,'yes ','no');
image.png
3)ifnull

IFNULL(expr1,expr2)
假如expr1 不为NULL ,则IFNULL() 的返回值为expr1 ; 否则其返回值为expr2 。
IFNULL() 的返回值是数字或是字符串,具体情况取决于其所使用的语境。

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

推荐阅读更多精彩内容

  • -- 一、常用数学函数-- 绝对值SELECTabs( - 32 );-- 32-- 返回N被M除的余数 mod(...
    Boger_8cf1阅读 347评论 0 0
  • 一、字符串处理函数 1、REPLACE()字符串替换 语法: REPLACE(str,old_str,new_st...
    夏与清风阅读 2,270评论 0 3
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,340评论 0 2
  • mysql SELECT GREATEST(2,0);//2SELECT GREATEST('B','A','C'...
    wangxl999阅读 595评论 0 0
  • ASCII(str) 返回字符串 str 中最左边字符的 ASCII 代码值。如果该字符串为空字符串,则返回0。如...
    JavaEdge阅读 465评论 0 1