首页 > 数据库 >Mysql 函数 (进阶介绍 八)

Mysql 函数 (进阶介绍 八)

时间:2024-07-25 14:29:20浏览次数:18  
标签:返回 函数 Mysql mysql concat MySQL 字符串 SELECT 进阶

目录

MySQL CURTIME() 函数

定义和用法

语法

实例

MySQL DATE() 函数

定义和用法

语法

实例

MySQL EXTRACT() 函数

定义和用法

语法

实例

MySQL 字符串连接CONCAT()函数

使用方法:

MySQL 字符串截取SUBSTRING()函数 

使用方法:

MySQL 数学函数

使用方法:

mysql substr() 函数

截取字符串


MySQL CURTIME() 函数

定义和用法

CURTIME() 返回当前的时间。

语法

CURTIME()


实例

下面是 SELECT 语句:

SELECT NOW(),CURDATE(),CURTIME()

结果如下所示:

NOW()CURDATE()CURTIME()
2008-11-11 12:45:342008-11-1112:45:34

MySQL DATE() 函数

定义和用法

DATE() 函数提取日期或日期/时间表达式的日期部分。

语法

DATE(date)

date 参数是合法的日期表达式。


实例

假设我们有如下的 "Orders" 表:

OrderIdProductNameOrderDate
1Jarlsberg Cheese2008-11-11 13:23:44.657

下面是 SELECT 语句:

SELECT ProductName, DATE(OrderDate) AS OrderDate
FROM Orders
WHERE OrderId=1

结果如下所示:

ProductNameOrderDate
Jarlsberg Cheese2008-11-11

MySQL EXTRACT() 函数

定义和用法

EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法

EXTRACT(unit FROM date)

date 参数是合法的日期表达式。unit 参数可以是下列的值:

Unit 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH


实例

假设我们有如下的 "Orders" 表:

OrderIdProductNameOrderDate
1Jarlsberg Cheese2008-11-11 13:23:44.657

下面是 SELECT 语句:

SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay,
FROM Orders
WHERE OrderId=1

结果如下所示:

OrderYearOrderMonthOrderDay
20081111

MySQL 字符串连接CONCAT()函数

使用方法:

CONCAT(str1,str2,…)  

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

注意:
如果所有参数均为非二进制字符串,则结果为非二进制字符串。 
如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如:

SELECT CONCAT(CAST(int_col AS CHAR), char_col)

MySQL的concat函数可以连接一个或者多个字符串,如

mysql> select concat('10');
+--------------+
| concat('10') |
+--------------+
| 10   |
+--------------+
1 row in set (0.00 sec)
mysql> select concat('11','22','33');
+------------------------+
| concat('11','22','33') |
+------------------------+
| 112233 |
+------------------------+
1 row in set (0.00 sec)

MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

mysql> select concat('11','22',null);
+------------------------+
| concat('11','22',null) |
+------------------------+
| NULL   |
+------------------------+
1 row in set (0.00 sec)

MySQL中 concat_ws 函数
使用方法: 
CONCAT_WS(separator,str1,str2,...)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

如连接后以逗号分隔 

mysql> select concat_ws(',','11','22','33');

+-------------------------------+
| concat_ws(',','11','22','33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 row in set (0.00 sec)

和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL 
mysql> select concat_ws(',','11','22',NULL);
+-------------------------------+
| concat_ws(',','11','22',NULL) |
+-------------------------------+
| 11,22 |
+-------------------------------+
1 row in set (0.00 sec)

MySQL中 group_concat 函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

基本查询

mysql> select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200   |
|3 | 500   |
+------+------+
6 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔(默认)

mysql> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,分号分隔

mysql> select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500   |
+------+----------------------------------+
3 rows in set (0.00 sec)

以id分组,把去冗余的name字段的值打印在一行,

逗号分隔

mysql> select id,group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20   |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

mysql> select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10   |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)

repeat()函数

    用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数

  

 mysql> select repeat('ab',2);

+----------------+
| repeat('ab',2) |
+----------------+
| abab           |
+----------------+

   1 row in set (0.00 sec)

又如

mysql> select repeat('a',2);

+---------------+
| repeat('a',2) |
+---------------+
| aa            |
+---------------+
1 row in set (0.00 sec)


mysql向表中某字段后追加一段字符串:

update table_name set field=CONCAT(field,'',str)

mysql 向表中某字段前加字符串

update table_name set field=CONCAT('str',field)

MySQL 字符串截取SUBSTRING()函数 

使用方法:

1、从左开始截取字符串 

left(str, length) 
说明:left(被截取字段,截取长度) 
例:

select left(content,200) as abstract from my_content_t 

2、从右开始截取字符串 
right(str, length) 
说明:right(被截取字段,截取长度) 
例:

select right(content,200) as abstract from my_content_t 

3、截取字符串 
substring(str, pos) 
substring(str, pos, length) 
说明:substring(被截取字段,从第几位开始截取) 
substring(被截取字段,从第几位开始截取,截取长度) 

例:

select substring(content,5) as abstract from my_content_t 
select substring(content,5,200) as abstract from my_content_t 

(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度) 
4、按关键字截取字符串 
substring_index(str,delim,count) 
说明:substring_index(被截取字段,分隔符,关键字出现的次数) 

例:

select substring_index("www.w3cschool.cn",".",2) as abstract from wiki_user 

结果:www.w3cschool
(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束) 

函数简介:

SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)

不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值

MySQL 数学函数

使用方法:

所有的数学函数在发生错误的情况下,均返回 NULL

-元减。改变参数的符号

mysql> SELECT - 2; -> -2

注意,如果这个操作符被用于一个 BIGINT,返回值也是一个 BIGINT!这就意味着,应该避免在一个可能有值-2^63 的整数上使用 - 操作符!

ABS(X)返回 X 的绝对值:

mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32

这个函数可安全地使用于 BIGINT 值。

SIGN(X)以 -10 或 1 方式返回参数的符号,它取决于参数 X 是负数、0 或正数。

mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1

MOD(N,M)% 取模 (就如 C 中的 % 操作符)。返回 N 被 M 除后的余数:

mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2

这个函数可安全地使用于 BIGINT 值。最后一个示例可在 MySQL 4.1 中工作。

FLOOR(X)返回不大于 X 的最大整数值:

mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2

注意,返回值被转换为一个 BIGINT

CEILING(X)返回不小于 X 的最小整数:

mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1

注意,返回值被转换为一个 BIGINT

ROUND(X)

ROUND(X,D)将参数 X 四舍五入到最近的整数,然后返回。两个参数的形式是将一个数字四舍五入到 D 个小数后返回。

mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1

注意,当参数在两个整数之间时, ROUND() 的行为取决于 C 库的实现。某些取整到最近的偶数,总是向下取,总是向上取,也可能总是接近于零。如果你需要某种取整类型,应该使用一个明确定义的函数比如 TRUNCATE() 或 FLOOR() 代替。

DIV整除。类似于 FLOOR(),但是它可安全地用于 BIGINT 值。

mysql> SELECT 5 DIV 2 -> 2

DIV 在 MySQL 4.1.0 中新加入。

EXP(X)返回值 e (自然对数的底) 的 X 次方:

mysql> SELECT EXP(2); -> 7.389056 mysql> SELECT EXP(-2); -> 0.135335

LN(X)返回 X 的自然对数:

mysql> SELECT LN(2); -> 0.693147 mysql> SELECT LN(-2); -> NULL

这个函数在 MySQL 4.0.3 被新加入。在 MySQL 中,它是 LOG(X) 的同义词。

LOG(X)

LOG(B,X)如果以一个参数调用,它返回 X 的自然对数:

mysql> SELECT LOG(2); -> 0.693147 mysql> SELECT LOG(-2); -> NULL

如果以两个参数调用,这个函数返回 X 任意底 B 的对数:

mysql> SELECT LOG(2,65536); -> 16.000000 mysql> SELECT LOG(1,100); -> NULL

任意底选项在 MySQL 4.0.3 中被加入。LOG(B,X) 等价于 LOG(X)/LOG(B)

LOG2(X)返回 X 的以 2 为底的对数:

mysql> SELECT LOG2(65536); -> 16.000000 mysql> SELECT LOG2(-100); -> NULL

LOG2() 通常可以用于计数出一个数字需要多少个比特位用于存储它。这个函数在 MySQL 4.0.3 中被添加。在更早的版本中,可以使用 LOG(X)/LOG(2) 来代替它。

LOG10(X)返回 X 以 10 为底的对数:

mysql> SELECT LOG10(2); -> 0.301030 mysql> SELECT LOG10(100); -> 2.000000 mysql> SELECT LOG10(-100); -> NULL

POW(X,Y)

POWER(X,Y)返回 X 的 Y 幂:

mysql> SELECT POW(2,2); -> 4.000000 mysql> SELECT POW(2,-2); -> 0.250000

SQRT(X)返回 X 的非否平方根:

mysql> SELECT SQRT(4); -> 2.000000 mysql> SELECT SQRT(20); -> 4.472136

PI()返回 PI 值(圆周率)。缺少显示 5 位小数,但是在 MySQL 内部,为 PI 使用全部的双精度。

mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116

COS(X)返回 X 的余弦,在这里,X 以弧度给出:

mysql> SELECT COS(PI()); -> -1.000000

SIN(X)返回 X 的正弦,在这里,X 以弧度给出:

mysql> SELECT SIN(PI()); -> 0.000000

TAN(X)返回 X 的正切,在这里,X 以弧度给出:

mysql> SELECT TAN(PI()+1); -> 1.557408

ACOS(X)返回 X 的反余弦,更确切地说,返回余弦值为 X 的值。如果 X 不在 -1 到 1 之间的范围内,返回 NULL

mysql> SELECT ACOS(1); -> 0.000000 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.570796

ASIN(X)返回 X 的反正弦,更确切地说,返回正弦值为 X 的值。如果 X 不在 -1 到 1 之间的范围内,返回 NULL

mysql> SELECT ASIN(0.2); -> 0.201358 mysql> SELECT ASIN('foo'); -> 0.000000

ATAN(X)返回 X 的反正切,更确切地说,返回正切值为 X 的值:

mysql> SELECT ATAN(2); -> 1.107149 mysql> SELECT ATAN(-2); -> -1.107149

ATAN(Y,X)

ATAN2(Y,X)返回两个变量 X 和 Y 的反正切。它类似于计算 Y / X 的反正切,除了两个参数的符号用于决定结果的象限:

mysql> SELECT ATAN(-2,2); -> -0.785398 mysql> SELECT ATAN2(PI(),0); -> 1.570796

COT(X)返回 X 的余切:

mysql> SELECT COT(12); -> -1.57267341 mysql> SELECT COT(0); -> NULL

RAND()

RAND(N)返回一个范围在 0 到 1.0 之间的随机浮点值。如果一个整数参数 N 被指定,它被当做种子值使用(用于产生一个可重复的数值):

mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881

在一个 ORDER BY 子句中,不可以使用 RAND() 值使用一个列,因为 ORDER BY 将多次重复计算列。从 MySQL 3.23 开始,你可以使用:SELECT * FROM table_name ORDER BY RAND(),这有利于得到一个来自 SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000 的集合中的随机样本。 注意,在一个 WHERE 子句中的 RAND() 将在每次 WHERE 执行时被重新计算。 RAND() 并不是预期完美的随机数发生器,但是可以代替做为产生特别的随机数一个快速的方法,这样便于在两个不同平台下的同一 MySQL 版本间移动。

LEAST(X,Y,...)

有两个或更多个参数,返回最小(最小值)的参数。参数使用下列规则进行比较:

  • 如果返回值用于一个 INTEGER 语境,或所有的参数是整数值,它们作为整数比较。
  • 如果返回值用于一个 REAL 语境,或所有的参数均是实数值,它们作为实数被比较。
  • 如果任何一个参数是字母大小写敏感的,参数作为大小写敏感的字符串进行比较。
  • 在其它情况下,参数做为忽略大小写的字符中进行比较:
mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST("B","A","C"); -> "A"

在早于 MySQL 3.22.5 的版本中,你可以使用 MIN() 代替 LEAST

GREATEST(X,Y,...)返回最大(最大值)参数。参数使用与 LEAST 一致的规则进行比较:

mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> 767.0 mysql> SELECT GREATEST("B","A","C"); -> "C"

在早于 MySQL 3.22.5 的版本中,可以使用 MAX() 代替 GREATEST

DEGREES(X)将参数 X 从弧度转换为角度,然后返回:

mysql> SELECT DEGREES(PI()); -> 180.000000

RADIANS(X)将参数 X 从角度转换为弧度,然后返回:

mysql> SELECT RADIANS(90); -> 1.570796

TRUNCATE(X,D)将数值 X 截到 D 个小数,然后返回。如果 D 为 0,结果将不包含小数点和小数部分:

mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9

从 MySQL 3.23.51 开始,所有数字被四舍五入到零。 如果 D 是负数,那么数字的整个部分被对准零位输出:

mysql> SELECT TRUNCATE(122,-2); -> 100

注意,十进值小数在计算机中通常不以精确数字存储,而是双精度型的值,你可能会被下列结果所愚弄:

mysql> SELECT TRUNCATE(10.28*100,0); -> 1027

上面结果的发生是因为 10.28 实际上是以某些像 10.2799999999999999 的形式被存储的

mysql substr() 函数

截取字符串

用法:substr(string string,num start,num length);

select  substr(参数1,参数2,参数3)  from  表名

string为字符串;start为起始位置;length为长度。

注意:mysql中的start是从1开始的。

例子:(查出kename字段中第一次出现.之前的字符串)

select kename,substr(kename,1,locate('.',kename)) as subkename from  web_dev_api where 1;

截取前两位字符

标签:返回,函数,Mysql,mysql,concat,MySQL,字符串,SELECT,进阶
From: https://blog.csdn.net/weixin_64261178/article/details/140658071

相关文章

  • 一文了解MySQL索引机制
    接触MySQL数据库的小伙伴一定避不开索引,索引的出现是为了提高数据查询的效率,就像书的目录一样。某一个SQL查询比较慢,你第一时间想到的就是“给某个字段加个索引吧”,那么索引是什么?是如何工作的呢?一起静下心来,耐心看完这篇文章吧,干货不啰嗦,相信你一定会有所收获。一、索引模型模......
  • Mysql中修改新创建用户的密码
    创建新用户时,新用户没有权限,所以自己无法修改成简单的密码(1)可以通过root用户给权限,让新用户自己修改:1.先进入root用户,mysql-uroot-p1234562.给新用户权限:grantallprivilegeson.to'新用户名'@'localhost'withgrantoption;(其中withgrantoption是让新用户......
  • SpringBoot + MyBatis 实现 MySQL 主从复制动态数据源切换
    概述在项目中的某些场景中,需要对数据库进行一些优化。常用的有如下的实现方法:读写分离、引入缓存技术、主从复制、分库分表等。今天来简单介绍一些如何在程序中实现动态切换数据源,可能某台服务器性能比较好,让流量多的方法执行切换到此数据源去操作等等。当然这种思想也可以扩展......
  • MySql数据表创建并新增数据
    --------------------------------Tablestructureforbs002h------------------------------DROPTABLEIFEXISTS`bs002h`;CREATETABLE`bs002h`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`cr_time`datetime(6)NOTNULL,`rg_time`datetime(6)NOT......
  • Qt基础 | Qt SQL模块介绍 | Qt SQL模块常用类及其常用函数介绍
    文章目录一、QtSQL模块概述1.Qtsql支持的数据库2.SQLite数据库3.QtSQL模块的主要类一、QtSQL模块概述  QtSQL模块提供数据库编程的支持,Qt支持多种常见的数据库,如MySQL、Oracle、MSSQLServer、SQLite等。QtSQL模块包括多个类,可以实现数据库连接、SQ......
  • 记一次mysql生产误删表抢救操作
    背景数据库的操作必须要采取一系列的措施来规范流程和管理。然而,不同客户群体管理水平不一,删库跑路也并不是茶余饭后的笑话,它真真实实的,突如其来的就发生在你身边。接项目经理前线打来电话,某医院突发生产故障,通过业务日志得知,数据库缺表,需要紧急恢复数据,恢复生产。思路确认环......
  • 错误 1 error LNK2019: 无法解析的外部符号 _MQTTClient_create,该符号在函数 "protect
    前言全局说明错误1errorLNK2019:无法解析的外部符号_MQTTClient_create,该符号在函数"protected:virtualint__thiscallCmfc_mqttclientpoweronoffDlg::OnInitDialog(void)"(?OnInitDialog@Cmfc_mqttclientpoweronoffDlg@@MAEHXZ)中被引用一、说明环境:Windows1......
  • C++深拷贝构造函数解决浅拷贝的堆区内存重复释放问题
    1.简单介绍先简单介绍一下浅拷贝和深拷贝:浅拷贝->简单的赋值拷贝操作,默认的拷贝构造函数就是浅拷贝。深拷贝->在堆区重新申请空间,进行拷贝操作。2.问题展示下面用代码示例明了地展示默认拷贝构造函数浅拷贝带来地堆区内存重复释放问题:#include<iostream>usingnamespace......
  • 为什么上传文件时我的 Azure 函数应用 blob 触发器不起作用?
    我用python创建了一个blob触发函数应用程序。我的存储帐户中还有一个Blob存储。设置(local.settings,function.json)似乎没问题。运行:funcstart并在blob中上传文件后,没有任何反应。这是代码:importloggingfromazure.functionsimportInputStreamimportpand......
  • MySQL配置开发文章:学习路线、使用案例及代码示例
    引言MySQL是一个广泛使用的开源关系型数据库管理系统,由于其性能高、成本低、可靠性强,成为了许多开发者的首选工具,本文将介绍MySQL的基本配置、学习路线、使用案例及代码示例,帮助你更好地掌握MySQL的使用MySQL配置开发教程学习路线基础知识:了解关系型数据库的基本概念,熟......