当前位置:首页 > 编程笔记 > 正文
已解决

mysql使用--表达式和函数

来自网友在路上 11088108提问 提问时间:2023-11-20 12:56:20阅读次数: 108

最佳答案 问答题库1088位专家为你答疑解惑

1.表达式
如:1+1,一般包含操作数,运算符。
_1.操作数
MYSQL中最常用的操作数有以下几种
(1).常数
(2).列名,针对某个具体的表,它的列名可被当作表达式的一部分
(3).函数调用
一个函数用于完成某个特定的功能。比如NOW()获取当前时间。
(4).其他表达式
一个表达式也可作为一个操作数与另一个操作数形成一个更复杂的形式。

_2.运算符
常用的有
(1).算术运算符

运算符示例描述+a+b加法-a-b减法*a*b乘法/a/b除法DIVa DIV b除法,取商的整数部分%a%b取余--a取负值

DIV取商的整数部分,/会保留小数部分。
(2).比较运算符

运算符示例解释=a=b等于<=>a<=>b等于(NULL值安全等于)<>或!=a<>b不等于<a<b小于<=a<=b小于或等于>a>b大于>=a>=b大于等于BETWEENa BETWEEN b AND ca需满足b<=a<=cNOT BETWEENa NOT BETWEEN b AND ca需不满足b<=a<=cINa IN (b1, b2)a是b1,b2中的某个NOT INa NOT IN (b1, b2, b3)a不是b1,b2中的某个IS NULLa IS NULLIS NOT NULLa IS NOT NULLLIKEa LIKE ba匹配bNOT LIKEa NOT LIKE b不匹配

比较表达式结果要么1(TRUE),要么0(FALSE)
(3).逻辑运算符

运算符示例描述NOT(也可写作!)NOT a对a取反AND(也可写作&&)a AND bOR(也可写作)XORa XOR ba和b有且只有一个为真时,表达式为真

_3.表达式的使用
_3.1.作为计算字段放在SELECT子句中
如:SELECT number, score+100 FROM student_score;
还有像这样的:SELECT 1, ‘a’ FROM student_score;
查询处理为:
(1).基于FROM结合WHERE得到结果集。
(2).对结果集每一行结合SELECT语句得到最终集中一行结果。

_3.2.作为搜索条件放在WHERE子句
基于FROME结合WHERE得到结果集时,对FROM得到表的每一行采用WHERE表达式,结果为TRUE,此行加入结果集。

_3.3.表达式中的NULL
_3.3.1.NULL作为算术符的操作数时,表达式的结果都为NULL
如:1+NULL结果是NULL,NULL*1结果也是NULL
_3.3.2.除<=>、IS NULL、IS NOT NULL外,NULL作为其余比较运算符的操作数时,表达式的结果都为NULL。
如:1=NULL结果是NULL,2>NULL结果是NULL。
IS NULL,IS NOT NULL用于判断某个值是否为NULL,结果只能是0或1。
<=>的操作数不包含NULL时,等价于=;当<=>的一个操作数为NULL,另一个不为NULL时,结果为0;两个操作数都为NULL时,结果为1;

2.函数
_1.字符串处理函数

名称调用示例结果描述LEFTLEFT(‘abc123’, 3)abc提取左边指定长度串RIGHTRIGHT(‘abc123’, 3)123LENGTHLENGTH(‘abc’)3LOWERLOWER(‘ABC’)abcUPPERUPPER(‘abc’)ABCLTRIMLTRIM(’ abc’)abcRTRIMRTRIM('abc ')abcSUBSTRINGSUBSTRING(‘abc123’, 2, 3)bc1CONCATCONCAT(‘abc’, ‘123’, ‘xyz’)abc123xyzCHAR_LENGTHCHAR_LENGTH(‘狗哥’)2给定字符串的字符数量

_2.日期和时间处理函数

名称示例结果描述NOWNOW()2021-05-11 17:10:43当前日期和时间CURDATECURDATE()2021-05-11CURTIMECURTIME()17:10:43DATEDATE(‘2021-05-11 17:10:43’)2021-05-11将给定日期和时间值的日期提取出来DATE_ADDDATE_ADD(‘2021-05-11 17:10:43’, INTERVAL 2 DAY)2021-05-13 17:10:43DATE_SUBDATE_SUB(‘2021-05-11 17:10:43’, INTERVAL 2 DAY)2021-05-09 17:10:43DATEDIFFDATEDIFF(‘2021-05-11’, ‘2021-05-17’)-6DATE_FORMATDATE_FORMAT(NOW(), ‘%m-%d-%Y’)05-11-2021YEARYEAR(‘2021-05-11 17:10:43’)2021MONTHMONTH(‘2021-05-11 17:10:43’)5DAYDAY(‘2021-05-11 17:10:43’)11HOURHOUR(‘2021-05-11 17:10:43’)17MINUTEMINUTE(‘2021-05-11 17:10:43’)10SECONDSECOND(‘2021-05-11 17:10:43’)43

_2.1.使用DATE_ADD,DATE_SUB时,可自定义增加或减去的时间间隔的单位。

单位描述MICROSECOND毫秒SECOND秒MINUTE分钟HOUR小时DAY天WEEK星期MONTH月QUARTER季度YEAR年

如:SELECT DATE_ADD(‘2021-05-11 17:10:43’, INTERVAL 2 MINUTE)

_2.2.使用DATE_FORMAT需注意,可通过一些所谓的格式符来自定义日期和时间的显示格式。

格式符含义%b简写的月份名称(Jan、、、)%D带英文后缀的月份中的日期(0th,1st,…)%d数字格式的月份中的日期(00,01,…)%f微妙(000000~999999)%H24小时制的小时(00~23)%h12小时制的小时(01~12)%i数值格式的分钟(00~59)%M月份名(January,…)%m数值形式的月份(00~12)%p上午或下午(AM代表上午,PM代表下午)%S秒(00~59)%s秒(00~59)%W星期名(Sunday,…)%w周内第几天(0=星期日,…)%Y4位数字形式的年(例如2019)%y2位数字形式的年(例如19)

_2.3.数值处理函数

名称示例结果描述ABSABS(-1)1PiPI()3.141593COSCOS(PI())-1SINSIN(PI())1TANTAN(0)0POWPOW(2, 2)4SQRTSQRT(9)3MODMOD(5, 2)1RANDRAND()0.7537623539136372CEILCEIL(2.3)3FLOORFLOOR(2.3)2

_2.4.流程控制表达式和函数
CASE WHEN 表达式1 THEN 结果1 [WHEN 表达式1 THEN 结果1 …] [ELSE 默认结果] END
如:SELECT number, score, CASE WHEN score < 60 THEN ‘不及格’ WHEN score < 90 THEN ‘及格’ ELSE ‘优秀’ END As level FROM student_score;

CASE表达式还有第二种形式:
CASE 待比较表达式 WHEN 表达式1 THEN 结果1 [WHEN 表达式2 THEN 结果2 …] [ELSE 默认结果] END
它的含义是:
(1).待比较表达式值和表达式1值相同时,整个CASE值是结果1
(2).待比较表达式值和表达式2值相同时,整个CASE值是结果2

(3).待比较表达式值和所有WHEN后的表达式值都不同,则整个CASE表达式的值就是ELSE之后的默认结果。
如:SELECT name, department, CASE deparement WHEN ‘计算机学院’ THEN ‘1级学科’ WHEN ‘航天学院’ THEN ‘2级学科’ END AS 学院类别 FROM student_info;

除CASE语句外,还可用下面三个函数进行条件判断。
(1).IF(表达式1, 表达式2, 表达式3)
含义为:表达式1为TRUE时,返回值为表达式2;否则为表达式3;
(2).IFNULL(表达式1, 表达式2)
含义为:当表达式1为NULL时,返回值为表达式2;否则为表达式1;
(3).NULLIF(表达式1, 表达式2)
含义为:当表达式1值和表达式2值相同时,返回值为NULL;否则为表达式1;

_2.5.汇总函数
_1.常见函数
(1).MAX(表达式)
(2).MIN(表达式)
(3).SUM(表达式)
(4).AVG(表达式)
(5).COUNT(表达式)
上述函数的原理是,先从表运算得到结果集1,结果集1通过WHERE过滤得到结果集2,对结果集2的每一行执行汇总函数。结果集2中所有行处理完毕后,得到一个最终结果。
_2.汇总函数中DISTINCT的使用
如:SELECT COUNT(DISTINCT major) FROM student_info;
这样,结果集2中相同的表达式即使出现在多行,也只参与一次汇总函数运算。
_3.使用多个汇总函数
如:SELECT COUNT(*) AS 成绩记录总数, MAX(score) AS 最高成绩, MIN(score) AS 最低成绩, AVG(score) AS 平均成绩 FROM student_score;

3.隐式类型转换
_1.将操作数类型转换为运算符需要的类型
如:SELECT 1+2, ‘1’+2, ‘1’+‘2’结果中每一列都是数值3
一些字符串转换成数值的举例:
“12a”–>12,“2019-01”–>2019,“abc”–>0
_2.将函数参数转换成该函数期望的类型
指的是实参被转换为形参所需类型。
如:CONCAT(‘1’, ‘2’),CONCAT(‘1’, 2),CONCAT(1, 2)结果都是’12’。
_3.在WHERE子句中,单独的字符串类型的表达式会被转换为DOUBLE类型的数值。
_4.存储数据时,把某个值转换为某个列需要的类型
类似与实参转换为形参。
注意的是,向表中插入记录时,发生字符串的表达式转换为DOUBLE时,不可产生截断。
‘12a’->12产生截断,因为存在字符a未参与转换。
‘12’->12未产生截断,因为所有字符都参与了转换。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"mysql使用--表达式和函数":http://eshow365.cn/6-40357-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!