今天我们主要MySQL的函数和谓词。

目录

  • 1.函数
    • 1.1算数函数
    • 1.2 字符串函数
    • 1.3 日期函数
    • 1.4 转换函数
  • 2.谓词
  • 参考资料

1.函数

我们在前面几张章学习了SQL语言一些基本的语法结构,今天我们来介绍函数,函数大致可以分为以下几种:

  • 算数函数(用来进行数值计算的函数)
  • 字符串函数(用来进行字符串操作的函数)
  • 日期函数(用来进行日期操作的函数
  • 转换函数(用来转化数据类型和值的函数)
  • 聚合函数(用来进行数据聚合的函数)
    我们前面已经学习了聚合函数,如:COUNT、SUM、AVG、MAX、MIN这五种,而其他种类的函数超过200种,但常用的函数就只有30-50种。

1.1算数函数

算数函数就是最基本的函数:+、-、*、/ (加减乘除),为了学习科学计算,我们首先创建一个表。这里需要说明一下,因为后面会用到ROUND函数,该函数需要NUNERIC类型的函数,通过NUMERIC (全体位数,小数位数)的形式来指定数值的大小。

--创建表 (DDL)
CREATE TABLE samplemath
(m NUMERIC (10,3),n INTEGER,p INTEGER
);--插入的数据 (DML)
BEGIN TRANSACTION;
INSERT INTO samplemath ( m,n,p) VALUES (500,0,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (-180,0,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (NULL,NULL,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (NULL,7,3);
INSERT INTO samplemath ( m,n,p) VALUES (NULL,5,2);
INSERT INTO samplemath ( m,n,p) VALUES (NULL,4,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (8,NULL,3);
INSERT INTO samplemath ( m,n,p) VALUES (2.27,1,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (5.555,2,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (NULL,1,NULL);
INSERT INTO samplemath ( m,n,p) VALUES (8.76,NULL,NULL);
COMMIT;

结果如下:


ABS绝对值函数

SELECT m,ABS(m) AS abs_col
FROM samplemath;

返回结果:可以看出null的绝对值为null。

MOD取余

MOD(被除数,除数)
SELECT n,p,MOD(n,p) AS mod_col
FROM samplemath;

求余结果:

ROUND四舍五入

ROUND(对象数值,保留小数的位数)
SELECT m,n,ROUND(m,n) AS round_col
FROM samplemath;

1.2 字符串函数

字符串函数也是被经常使用的一种函数,为了学习字符串函数,我们就创建一个字符串表。

--MySQL
--DDL:创建表
CREATE TABLE SampleStr
(str1  VARCHAR(40),str2  VARCHAR(40),str3  VARCHAR(40));--DML:插入数据
START TRANSACTION;INSERT INTO SampleStr (str1, str2, str3) VALUES ('opx',         'rt'  ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc'    ,   'def' ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('山田' ,   '太郎'  ,   '是我');
INSERT INTO SampleStr (str1, str2, str3) VALUES ('aaa'    ,   NULL    ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES (NULL   ,   'xyz',            NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('@!#$%',    NULL    ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('ABC'    ,   NULL    ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('aBC'    ,   NULL    ,   NULL);
INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc太郎', 'abc' ,   'ABC');
INSERT INTO SampleStr (str1, str2, str3) VALUES ('abcdefabc',   'abc'   ,   'ABC');
INSERT INTO SampleStr (str1, str2, str3) VALUES ('micmic',          'i',        'I');COMMIT;


CONCAT拼接
在业务中我们经常碰见abc+bcd=abcbcd这样的字符串拼接操作。

SELECT str1, str2,CONCAT(str1, str2) AS str_concatFROM SampleStr;

拼接成功:

当然我们也可以拼接多个字符串,只要在CONCAT(str1, str2, str3) .
LENGTH字符串长度

--查看字符串长度
SELECT str1,LENGTH(str1) AS len_str
FROM samplestr;


LOWER小写转换和UPPER大写转换

SELECT str1,LOWER(str1) AS low_str
FROM sampleStr
WHERE str1 IN ('ABC','aBC','abc','山田','@!#$%')
--这里要加WHERE的原因是大小写转化只是用英文字母的场合,其他场合不适用

结果如下:

REPLACE字符串的替换

REPLACE(需要替换的对象,替换的字符,替换后的字符串)
REPLACE(abcdefg,abc,ABC)--将abcdefg中的abc替换成ABC
SELECT str1,str2,str3,REPLACE(str1,str2,str3) AS rep_str
FROM samplestr;

结果如下:

SUBSTRING字符串的截取

SUBSTRING(对象字符串 FROM 截取位置的起始位置 FOR 截取的字符数)

例如:

SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS sub_strFROM samplestr;

这里截取的字符str1的第3个位置开始后的2个字符,也就是3、4号字符。

1.3 日期函数

CURRENT_DATE日期函数

--获取当前日期函数
CURRENT_DATE--例如:获取当前日期
SELECT CURRENT_DATE;

获取当前时间。

CURRENT_TIME当前时间

SELECT CURRENT_TIME;


CURRENT_TIMESTAMP当前时间和日期

SELECT CURRENT_TIMESTAMP;


EXTRACT截取日期元素

EXTRACT(日期元素 FROM 日期)

使用EXTRACT函数可以截取出日期数据的一部分,例如‘年’,‘月’,或者‘小时’,‘秒’等。该函数返回的数值并不是日期类型而是数值类型。

--获取时间地点
SELECT CURRENT_TIMESTAMP,EXTRACT(YEAR   FROM CURRENT_TIMESTAMP) AS year,EXTRACT(MONTH  FROM CURRENT_TIMESTAMP) AS month,EXTRACT(DAY    FROM CURRENT_TIMESTAMP) AS day,EXTRACT(HOUR   FROM CURRENT_TIMESTAMP) AS hour,EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;

1.4 转换函数

CAST类型转换

CAST(转换前的值 AS 想要转换的值)

例如:

SELECT CAST('0001' AS SIGNED INTEGER) AS int_col;

将“0001”转化为了数字类型1;

COALESCE将NULL转化为其他值

COALESCE(数据1,数据2,数据3.....)

COALESCE是SQL特有的函数,该函数会返回可变参数中左侧开始开始第1个不是NULL的值,参数个数是可变的,因此可以根据需要无限增加。

SELECT COALESCE(NULL, 1)                  AS col_1,COALESCE(NULL, 'test', NULL)       AS col_2,COALESCE(NULL, NULL, '2009-11-01') AS col_3;

在SQL语句中将NULL转化为其他值时就会用到转化函数。就像之前我们学习的那样,运算或者函数中含有NULL时,结果全都会变成NULL。

2.谓词

什么是谓词?其实大家已经使用过很多谓词:=,<,>,<>等比较运算符,其正式的名称就是比较谓词,本章节主要介绍以下谓词:

  • LIKE
  • BETWEEN
  • IS NULL、IS NOT NULL
  • IN
  • EXISTS

LIKE 谓词
我们首先创建一个字符表。

CREATE TABLE Samplelike(
strcol VARCHAR(6) NOT NULL,
PRIMARY KEY (strcol)
);--DML 插入数据
BEGIN TRANSACTION;
INSERT INTO samplelike (strcol) VALUES ('abcddd');
INSERT INTO samplelike (strcol) VALUES ('dddabc');
INSERT INTO samplelike (strcol) VALUES ('abdddc');
INSERT INTO samplelike (strcol) VALUES ('abcdd');
INSERT INTO samplelike (strcol) VALUES ('abddc');
COMMIT;

选择以ddd开头的所有字符

SELECT * FROM samplelike WHERE strcol LIKE 'ddd%';


选择以ddd结尾的所有字符

SELECT * FROM samplelike WHERE strcol LIKE '%ddd';


选择以ddd中间的所有字符

SELECT * FROM samplelike WHERE strcol LIKE '%ddd%';


除了%还可以用_(下划线)来代替,它代表了‘任意1个字符’

SELECT *
FROM samplelike
WHERE strcol LIKE 'abc__';--这里是两个字符


BETWEEN范围查询
可以选取100到1000范围内的数据

SELECT product_name,sale_price
FROM product
WHERE sale_price BETWEEN 100 AND 1000;


IS NULL 、IS NOT NULL 判断是否为NULL
选取进货单价为空的商品

SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NULL;


选取进货单价不为空的商品

SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NOT NULL;


IN NOT IN选择在/不在集合内的目标
IN和其他谓语不一样的地方在于IN后面放子查询。
选择进货单价为320、500、5000的商品

SELECT product_name,purchase_price
FROM product
WHERE purchase_price IN (320,500,5000);


EXISTS
EXISTS和其他的谓词都不一样,因为很难很难很难理解!EXISTS只在乎结果存不存在,返回的是TRUE和FALSE。
我们先创建一个表,插入数据

--创建一个表
CREATE TABLE ShopProduct
(shop_id    CHAR(4)       NOT NULL,shop_name  VARCHAR(200)  NOT NULL,product_id CHAR(4)       NOT NULL,quantity   INTEGER       NOT NULL,PRIMARY KEY (shop_id, product_id));START TRANSACTION;INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',  '东京',     '0001',   30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',    '东京',     '0002',   50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000A',    '东京',     '0003',   15);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',    '名古屋',    '0002',   30);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',    '名古屋',    '0003',   120);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',    '名古屋',    '0004',   20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',    '名古屋',    '0006',   10);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000B',    '名古屋',    '0007',   40);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',    '大阪',     '0003',   20);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',    '大阪',     '0004',   50);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',    '大阪',     '0006',   90);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000C',    '大阪',     '0007',   70);
INSERT INTO ShopProduct (shop_id, shop_name, product_id, quantity) VALUES ('000D',    '福冈',     '0001',   100);
COMMIT;

数据类型:

我们使用EXISTS选取出‘大阪店在售商品的销售单价’

SELECT product_name, sale_priceFROM Product AS PWHERE EXISTS (SELECT *FROM ShopProduct AS SPWHERE SP.shop_id = '000C'AND SP.product_id = P.product_id);

执行结果:

参考资料

图书:《SQL基础教程》

MySQL之函数和谓词相关推荐

  1. mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...

  2. MICK-SQL基础教程(第二版) 第六章 函数、谓词、CASE表达式

    第六章 函数.谓词.CASE表达式 函数 函数大致可以分为以下几种: 算术函数(用来进行数值计算的函数) 字符串函数(用来进行字符串操作的函数) 日期函数(用来进行日期操作的函数) 转换函数(用来转换 ...

  3. oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...

    我有兴趣知道是否有任何MySQL / Oracle函数给增量号.在另一列相似的值的基础上的一列? 就像在我的下面的代码中,我有order_primary列,其中包含订单号.所以基于此我们可以确定有多少 ...

  4. ipad php mysql_PHP中的MYSQL常用函数

    PHP中的MYSQL常用函数 1.mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path ...

  5. mysql 本周函数_【转】MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据...

    MySQL时间函数的使用:查询本周.上周.本月.上个月份的数据[转] /*今天*/ select * from 表名 where to_days(时间字段) = to_days(now()); /*昨 ...

  6. mysql聚合函数count用法_MySQL中聚合函数count的使用和性能优化技巧

    本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是 ...

  7. MySQL STR_TO_DATE函数

    转: MySQL STR_TO_DATE函数 2017年12月05日 15:41:58 木林森淼 阅读数:23822 版权声明:水平有限,如有补充或更正,望大家评论指正 https://blog.cs ...

  8. MYSQL 加密函数的用法

    常见加密函数有md5,hash,password等,mysql应用web一般都是md5,32位的,下面讲将MYSQL 加密函数的用法.1,md5加密用法select md5('admin');2,pa ...

  9. Mysql 常用函数(19)- mod 函数

    Mysql常用函数的汇总,可看下面文章 https://www.cnblogs.com/poloyy/p/12890763.html mod 的作用 求余数,和%一样 mod的语法格式 mod(n,m ...

最新文章

  1. Cron 表达式极速参考
  2. linux下的oracle10g rman备份
  3. 孙琦:大数据思维助力我探究能源颗粒机理 | 提升之路系列(四)
  4. vue引用公用的头部和尾部文件。
  5. 阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春
  6. Net中如何操作IIS
  7. Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数
  8. 中兴通讯与北京交通大学、中国移动北京公司签署 “5G战略合作框架协议”
  9. maven命令mvn package指定jar包名称
  10. 寺库商用区块链落地,联盟链为每件奢侈品发“×××”
  11. 哈工大-基于内核栈切换的进程切换
  12. 极客大学产品经理训练营:数据分析 第16课总结
  13. K3 Cloud BOS设计 增加表单按钮 修改状态
  14. go语言-LiteIDE 安装及使用教程
  15. 视频教程 | 与程序员进行高效沟通,三分钟带你掌握Zeplin
  16. 学生Dreamweaver静态网页设计 基于HTML+CSS+JavaScript制作简食餐厅美食网站制作
  17. 如何重置Mac的蓝牙模块以解决连接问题
  18. ASP.NET微信群机器人管家系统,源码分享
  19. 【生信分析】一些关于生物信息的常见名字解释
  20. 04_Linux ARM架构-部署kibana服务-银河麒麟V10 操作系统

热门文章

  1. 论如何科学的看小本子
  2. Jeecg-Boot简介
  3. 小米游戏本退出安全模式/win10安全模式密码
  4. Virt-manager虚拟机键盘错乱
  5. 31、Java——JDBC实现账号密码登录
  6. U-BOOT小全(一)
  7. IDEA远程提交hadoop任务时出现的错误
  8. NR modulation 4-AM
  9. cesium学习 之 Entity 画卫星轨道 (一)
  10. Android 的 Fragment 教程