暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL必知必会笔记(2)——函数集合

CoderGeshu 2020-04-10
410


每天进步一点点

★★★【前文链接MySQL必知必会笔记(1)

前文补充:

7.8 简单的正则表达式测试

可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0(没有匹配)或1(匹配)。可以用带文字串的REGEXP来测试表达式,并实验他们。相应的语法如下:

SELECT 'hello, world' REGEXP '[0-9]'

上述代码显然返回0,因为文本'hello, world'中没有数字。

8. MySQL中的函数

8.0 函数的简单测试方法及为列取别名

对于下文将要介绍的函数,可以使用如下方式进行简单的测试而不需使用具体的数据库表格,但是使用函数检索结果的列名是以函数的复杂信息显示的,为了显示简洁及便于利用检索出来的值,我们可以使用关键字AS
为新列取别名。

代码如下:

SELECT LENGTH('hello');
-- 显示结果
+----------------+
|LENGTH('hello') |
+----------------+
| 5 |
+----------------+

-- 对使用函数的新列取别名
SELECT LENGTH('hello') AS result;
-- 显示结果
+-------+
|result |
+-------+
| 5 |
+-------+

其余函数测试方法类似,不再赘述(有的不可以使用此方法测试,注意即可)。

8.1 文本处理函数

☆★☆特别注意:MySQL中串下标从1开始而不是0。

本表格中函数参数省略。

函数说明
Concat()
拼接串
Trim()
去掉串左右两边的空格
LTrim()
去掉串左边的空格
RTrim()
去掉串右边的空格
Upper()
将串转换为大写
SubString()
返回子串的字符
Locate()
找出串的一个子串
Length()
返回串的长度
Left()
返回串左边length长度的字符
Right()
返回串右边length长度的字符
Soundex()
返回串的soundex值
Reverse()
翻转串
  1. Concat()
SELECT CONCAT('col_name1=',col_name1,',col_name2=',col_name2) AS result
FROM tbl_name;
//输出形式
col_name1=col_name1的内容,col_name2=col_name2的内容

  1. Trim()
    LTrim()
    RTrim()
SELECT TRIM(col_name) AS result FROM tbl_name;
SELECT LTRIM(col_name) AS result FROM tbl_name;
SELECT RTRIM(col_name) AS result FROM tbl_name;

  1. Upper()
SELECT UPPER(col_name) AS result FROM tbl_name;

  1. SubString()
-- 从第n位开始,共截取m位
SELECT SUBSTRING(col_name,n,m) AS result FROM tbl_name;
-- 从第n位开始,截取到串尾
SELECT SUBSTRING(col_name,n,m) AS result FROM tbl_name;

  1. Locate()
-- 如果子串在主串(表的列值)中有匹配,返回在主串中第一个字符的下标
-- 如果不匹配则返回0
SELECT LOCATE(substring, string) AS result FROM tbl_name;

-- 从主串的pos位置开始往后匹配
SELECT LOCATE(substring, string, pos) AS result FROM tbl_name;

-- 常使用方式
-- 例如:从websites表中检索出网址的url列值中以‘https://’开头的行
SELECT * FROM websites
WHERE LACATE('https://', url) = 1 -- (如果‘=0’则表示不以‘https://’开头)

类似函数:

  • POSITION(substring IN string)

  • INSTR(stringsubstring)

不予详细介绍。

  1. Length()
SELECT LENGTH(col_name) AS result FROM tbl_name

  1. Left()
    Right()
-- 返回串左边length长度的字符
SELECT LEFT(string, length) AS result FROM tbl_name;
-- 返回串右边length长度的字符
SELECT LEFT(string, length) AS result FROM tbl_name;

  1. Soundex()
SELECT * FROM tbl_name
WHERE SOUNDEX(col_name) = SOUNDEX(string)

注意Soundex()
函数是对串进行发音匹配比较而不是字母。

  1. Reverse()
-- 将串翻转
SELECT REVERSE(col_name) AS result FROM tbl_name;

8.2 时间日期处理函数

函数说明
Now()
返回当前日期和时间
CurDate()
返回当前日期
CurTime()
返回当前时间
Date(date)
返回日期时间的日期部分
Time(date)
返回日期时间的时间部分
Year(date)
返回一个日期的年份部分
Month(date)
返回一个日期的月份部分
Day(date)
返回一个日期的天数部分
Hour(time)
返回一个时间的小时部分
Minute(time)
返回一个时间的分钟部分
Second(time)
返回一个时间的秒数部分
AddDate(date, INTERVAL expr unit)
增加一个间隔日期
Date_Add(date, INTERVAL expr unit)
增加一个间隔日期(高度灵活)
AddTime(date, datetime)
增加一个间隔时间
DateDiff(date1, date2)
计算两个日期之差(天数)
Date_Format(date, format)
返回格式化日期
DayOfWeek(date)
返回日期对应是星期几

参数说明:

  1. date为时间参数
  2. AddDate()
    Date_Add()
    中的参数
  • date:起始日期或者起始时间。

  • expr:指定的是一个间隔值,在起始时间中增加或者减少。expr是一个字符串,对于负值间隔,可以以"-"开头。

  • unit:表示的是一个单位(day/month/year),比如:加上的是1天还是一个小时。

  1. AddTime(date, datetime)
    中datetime格式如:'1 2:3:0'(1天2小时3分钟0秒)

  2. 补充format可用格式:

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

例如:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
-- 显示格式
Dec 29 2008 11:45 PM

8.3 数值处理函数

本表格中函数参数省略。

函数说明
Abs()
返回一个数的绝对值
Exp()
返回一个数的指数
Sqrt()
返回一个数的平方根
Mod()
返回除操作的余数
Pi()
返回圆周率
Rand()
返回一个随机数
Sin()
返回一个角度的正弦
Cos()
返回一个角度的余弦
Tan()
返回一个角度的正切

8.4 聚集函数

本表格中函数参数省略。

函数说明
COUNT()返回某列的行数
SUM()返回某列的和
AVG()返回某列的平均值
MAX()返回某列的最大值
MIN()返回某列的最小值

注意

  1. 对NULL值是否忽略

上表格聚集函数都自动忽略NULL值,除了如下这种特殊情况:

  • 如果使用COUNT()时指定列名,即COUNT(col_name)
    时,此函数会忽略NULL值;
  • 如果使用COUNT(*)时,则不会忽略NULL值。
  1. 使用标准的算术操作符,所有的聚集函数都可以用来执行多个列上的计算。

如:

SELECT SUM(col1*col2) AS result FROM tbl_name;

8.5 函数应用位置

🔺函数不仅可以使用在SELECT后面,也可以使用在WHERE子句后面进行过滤数据。

-- 检索出日期在2017-01-01到2020-01-01之间的所有行
SELECT * FROM tbl_name
WHERE DATE(col_name) = BETWEEN '2017-01-01' AND '2020-01-01'

其余用法类似,在此不再赘述。

------------------------END------------------------


推荐阅读

👉MySQL必知必会(1)

👉JDBC编程技术

👉设计模式之观察者模式

👉排序算法——计数排序


(❤ ω ❤)喜欢的话关注一波吧(❤ ω ❤)

文章转载自CoderGeshu,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论