.net mysql字符串截取_【MySQL】字符串截取之SUBSTRING_INDEX和【MySQL】字符串四则运算...

substring_index(str,delim,count)

str:要处理的字符串

delim:分隔符

count:计数

例子:str=www.google.com

1.count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

SELECT SUBSTRING_INDEX('www.google.com','.',1);

结果是:www

842207f66b37c7cd52004200cf88fb0c.png

SELECT SUBSTRING_INDEX('www.google.com','.',2);

结果是:www.google

a0e14d39f5e2e8c6efc6ab2c714d9d71.png

2.count是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:

SELECT SUBSTRING_INDEX('www.google.com','.',-2);

结果为:google.com

40303ce40c2defc3ae65973cc2a5040c.png

如果我呀中间的的google怎么办?

很简单的,两个方向:

从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com','.',-2),'.',1);

结果为:google

5b1e7b2b6ac801e51af8539aebc9dbfe.png

总结:SUBSTRING_INDEX可以理解为java里面按照分隔符使用split进行分组,从所得数组的下标+1处一直到开始算起的位置的所有内容即为最终结果,如果count 不等于0,那么即使str中没有找到delim分隔,那么返回的结果就是str本身,即只要count!=0,那么返回的最差结果也是str本身(没有找到一个delim分隔符...的情况)

例如:

(1)

SELECT SUBSTRING_INDEX('www.google.com','AAA',-1);

SELECT SUBSTRING_INDEX('www.google.com','AAA',-99);

两者的结果都为:www.google.com

14c9fcccf8dab32f71107b535d0aae6e.png

(2)在项目中利用CONCAT来做字符串合并,发现一个一个有意思的事情,

SELECT CONCAT(SUBSTRING_INDEX('www.google.com','.',1),'-','AAAABB')

结果为:www-AAAABB

9144718efbd97646298605c7b363434f.png

(3)

SELECT CONCAT(SUBSTRING_INDEX('www.google.com','AAA',1),'-','AAAABB')

结果为:www.google.com-AAAABB

5dc279dd8dfbd519da440c1dd6f0fd2b.png

(4)

SELECT CONCAT(SUBSTRING_INDEX('www.google.com','AAA',1)-1,'-','AAAABB')

结果为:-1-AAAABB

048652ba2d7b78496cc46b96e9ff0812.png

结果咋这样呢?发现Mysql的字符串在参与运算的时候很有意思:

MYSQL截取函数:

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("blog.jb51.net","。",2) as abstract from my_content_t

结果:blog.jb51

(注:如果关键字出现的次数是负数 如-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之字符串进行运算或大小比较

在mysql当中,字符串类型间进行加减乘除运算的时候,如果字符串以数字开头,则会截取字符串以数字开头的那一部分数字进行运算,如果字符串没将诶有以数字开头数字,那么就只能截取的数值为0,那么进行加减的时候结果都是0,进行乘除的时候结果都是NULL(即如果以字符串开头,则会从数字一直截取到非数字为止;如果不以数字开头,那么取0)

如下几个结果说明问题:

mysql> select '1a'+'1b';//字符串分别以1开头,所以运算的时候,分别为1,结果为1+1=2

+-----------+

| '1a'+'1b' |

+-----------+

| 2 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select '2a'-'1b';//字符串分别以2和1开头,所以结果为2-1=1

+-----------+

| '2a'-'1b' |

+-----------+

| 1 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select '1a'/'2b';//字符串分别以1和2开头,所以结果为:1/2=0.5

+-----------+

| '1a'/'2b' |

+-----------+

| 0.5 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select 'a'/'b';//字符串分别以'a'和'b'开头,所以结果为0/0=NULL

+---------+

| 'a'/'b' |

+---------+

| NULL |

+---------+

1 row in set, 3 warnings (0.00 sec)

mysql> select 'a' - 'b';//字符串分别以'a'和'b'开头,结果为0-0=0

+-----------+

| 'a' - 'b' |

+-----------+

| 0 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select 'a' + 'b';//字符串分别以'a'和'b'开头,结果为0+0=0

+-----------+

| 'a' + 'b' |

+-----------+

| 0 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

如果一个字符串以数字开头,后面有非数字和数字组合的话,在进行运算的时候,会省略掉非数字和数字组合那一段,也就是只会截取开头的数字

mysql> select '2015-2-1' - '2015-1-1';字符串分别以'2015'和'2015'开头,结果为2015-2015=2015

+-------------------------+

| '2015-2-1' - '2015-1-1' |

+-------------------------+

| 0 |

+-------------------------+

1 row in set, 2 warnings (0.00 sec)

以上相当于2015-2015=0

mysql当字符串进行大小比较的时候

mysql> select '2015-2-1' > '2015-1-1';

+-------------------------+

| '2015-2-1' > '2015-1-1' |

+-------------------------+

| 1 |

+-------------------------+

1 row in set (0.00 sec)

mysql> select '2015-2-1' < '2015-1-1';

+-------------------------+

| '2015-2-1' < '2015-1-1' |

+-------------------------+

| 0 |

+-------------------------+

1 row in set (0.00 sec)

在这里非常奇怪,'2015-2-1' - '2015-1-1' = 0,为什么大小比较的时候会有大小之分呢?

原来对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较。

mysql> select '2017-03-20 15:27:49' > '2017-03-20 15:27:48';

+-----------------------------------------------+

| '2017-03-20 15:27:49' > '2017-03-20 15:27:48' |

+-----------------------------------------------+

| 1 |

+-----------------------------------------------+

1 row in set (0.00 sec)

看起来像日期的字符串可以用date_format函数提取当中的年月日,看如下:

mysql> select date_format('2017/03/20 15:27:49','%Y') 年,date_format('2017/03/20 15:27:49','%c') 月,date_format('2017/03/20 15:27:49','%d') 日;

+------+------+------+

| 年 | 月 | 日 |

+------+------+------+

| 2017 | 3 | 20 |

+------+------+------+

1 row in set (0.00 sec)

非数字字符在比较大小的时候,就例如:

mysql> select 'a' < 'b';

+-----------+

| 'a' < 'b' |

+-----------+

| 1 |

+-----------+

1 row in set (0.00 sec)

当中的字母会转成ascii码,再进行比较,以上是单字母字符串比较,如果是多字母数字混合字符串比较呢?

mysql> select '1c' > 'bc';

+-------------+

| '1c' > 'bc' |

+-------------+

| 0 |

+-------------+

1 row in set (0.00 sec)

mysql> select '1yz' > 'abc999';

+------------------+

| '1yz' > 'abc999' |

+------------------+

| 0 |

+------------------+

1 row in set (0.00 sec)

其实从上面的结果大概可以猜测得到,为让解释更清晰更有说服力,再看下图:

mysql> select ascii('1c'),ascii('bc');

+-------------+-------------+

| ascii('1c') | ascii('bc') |

+-------------+-------------+

| 49 | 98 |

+-------------+-------------+

1 row in set (0.00 sec)

mysql> select ascii('1yz'),ascii('abc999');

+--------------+-----------------+

| ascii('1yz') | ascii('abc999') |

+--------------+-----------------+

| 49 | 97 |

+--------------+-----------------+

1 row in set (0.00 sec)

字符串大小比较的时候,会从左向右将两个字符串第一个不相等的两个字符的ascii码的比较结果作为最终结果

有时候我们需要直接用MySQL的字符串函数截取字符,毕竟用程序截取(如PHP)还得先写个脚本连接数据库之类的,所以在这里做一个记录,希望对大家有用。

MySQL截取字符串函数

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("blog.jb51.net",".",2) as abstract from my_content_t

结果:blog.jb51

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用C#+Selenium+ChromeDriver 爬取网页,完美模拟真实的用户浏览行为

背景Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。而对于爬虫来说&#xff0c;使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。这里&#xff0c;我将介绍selenium 谷歌浏览器的一般使…

ASP.NET Core ActionFilter引发的一个EF异常

最近在使用ASP.NET Core的时候出现了一个奇怪的问题。在一个Controller上使用了一个ActionFilter之后经常出现EF报错。InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guarante…

BCVP开发者说第5期:QuartzCore.Blazor

沉静岁月&#xff0c;淡忘流年1项目简介QuartzCore.BlazorQuartzCore.Blazor 是一个基于 .Net5 开发的轻量级 Quartz 作业配置中心&#xff0c;实践应用 Ant Design Blazor 和 FreeSql 两个技术&#xff0c; 对这两个技术感兴趣的小伙伴可以加我一起学习讨论哦&#xff0c;对有…

mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?

本文同步Java知音社区&#xff0c;专注于Java作者&#xff1a;powdbahttps://yq.aliyun.com/articles/694162一、背景本文主要测试MySQL执行update语句时&#xff0c;针对与原数据&#xff08;即未修改&#xff09;相同的update语句会在MySQL内部重新执行吗&#xff1f;二、测试…

.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

2.2.2 核心模块--日志ILogger 的使用日志的 ID日志的分类日志的级别LoggerProvider日志的最佳实践.NET Core 和 ASP.NET Core 中的日志记录&#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?viewaspnetcore-5.0ILogger 的使用在 Get 方法中添…

mysql数据库设计三大范式_了解数据库设计三大范式

数据库设计范式什么是范式&#xff1a;简言之就是&#xff0c;数据库设计对数据的存储性能&#xff0c;还有开发人员对数据的操作都有莫大的关系。所以建立科学的&#xff0c;规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范…

使用BeetleX网关部署第三方Web服务

BeetleX的http/ws网关在早期版本可以启动和管理第三方Web服务进程&#xff0c;在最新的1.5版本中引入了文件管理功能&#xff0c;通过这一功能可以对第三方Web服务进行发布管理。加入文件管理后BeetleX的新版本网关服务可以理解为一个简单化的IIS&#xff0c;但它的不同之处是可…

2020.NET开发者大会大会线上同步直播,以及参会秘籍

2020.NET开发者大会马上就要开幕啦&#xff01;你都做好参会准备没有&#xff1f;本届峰会线上分享将在思否和CSDN两个媒体平台同步进行&#xff0c;大家可以选择适合自己的方式在线参与互动哦&#xff01;访问下方链接&#xff0c;可以直接加入直播&#xff1a;思否直播观看地…

C# 9.0中引入的新特性init和record的使用思考

.NET 5.0已经发布&#xff0c;C# 9.0也为我们带来了许多新特性&#xff0c;其中最让我印象深刻的就是init和record type&#xff0c;很多文章已经把这两个新特性讨论的差不多了&#xff0c;本文不再详细讨论&#xff0c;而是通过使用角度来思考这两个特性。initinit是C# 9.0中引…

使用 .NET Core 中的 EventCounters 衡量性能

背景对于每隔几毫秒发生的事件&#xff0c;最好使每个事件的开销较低&#xff08;小于一毫秒&#xff09;。 否则&#xff0c;对性能的影响将很大。 记录事件意味着你将向磁盘写入内容。 如果磁盘不够快&#xff0c;你将丢失事件。 你需要一个解决方案&#xff0c;而不是记录事…

基于 C# 的 ETL 大数据并行编程

作者&#xff1a;James Spinella译者&#xff1a;精致码农原文&#xff1a;https://bit.ly/3nGQu4J并行编程在历史上一直是软件开发中比较小众和复杂的环节&#xff0c;往往不值得头疼。但编写并行化应用只会越来越简单&#xff0c;一个应用同时利用设备 CPU 上的多个内核&…

一个小技巧助您减少if语句的状态判断

在进行项目的开发的过程中&#xff0c; if 语句是少不了的&#xff0c;但我们始终要有一颗消灭 if / else 语句的心。为了消灭if / else 我们引入了 短路器 的概念。短路器 有时候的确能精简我们的代码&#xff0c;但还不够&#xff0c;因此我参考了一个方法来继续消灭一部分 断…

抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实

编者&#xff1a;2020年中国.NET开发者大会第一天活动已经结束&#xff0c;可以通过https://codechina.csdn.net/lives 会看。第二天的Workshop 也有直播哦。12020年12月19日的苏州工业园区&#xff0c;天公作美&#xff0c;阳光明媚&#xff0c;气象迷人&#xff0c;正是一个搞…

python魔术方法由谁定义_Python的魔术方法

魔术方法就是在定义的类中定义一些”不一般”的方法&#xff0c;使类的使用更方便、完善、健壮&#xff0c;是python特有的方法&#xff0c;一般都是前后包含两个下划线__的方法称为魔术方法&#xff0c;例如__new__。基本魔术方法有哪些__new__&#xff1a;是在一个对象实例化…

Swagger在header中添加token

概述平常做项目使用mvcwebapi&#xff0c;采取前后端分离的方式&#xff0c;后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员。为了解决这个问题&#xff0c;项目中引用swagger&#xff08;我比较喜欢戏称为“丝袜哥”&…

如何在 C# 中使用 数据注解

数据注解 是一种可以应用到 类 或者 类成员上用来指定类之间关系的一种 Attribute&#xff0c;它的应用场景比较多&#xff0c;可用来描述 UI 上如何进行数据展示&#xff0c;还可以用来做类属性的规则验证&#xff0c;这篇文章就来讨论为什么 注解 值得你去学习&#xff0c;以…

2020年中国.NET开发者大会第二天 WorkShop

工作坊1&#xff1a;使用 NCF 从 0 到 1 快速模块化开发/部署业务系统实战工作坊简介&#xff1a;本次工作坊由盛派开发团队亲自带领开发者使用 NCF&#xff08;NeuCharFramework&#xff09; 框架进行系统快速开发&#xff0c;进行现场实操训练&#xff0c;大家可以通过本次活…

mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句

如何使用EXCEL生成SQL语句&#xff1f;将光标放到新的列上里面&#xff0c;然后在公式栏里面输入如下公式&#xff1a;"insert into t values("&A1&","&B1&","&C1&","&D1&")"效果图&#x…

OrchardCore实现模块化核心原理分析

【导读】ABP vNext并未过多探究&#xff0c;当然其基于DDD理念分层清晰&#xff0c;灵活性、扩展性自然也不在话下&#xff0c;但有些情况下我可能会首选OrchardCore&#xff0c;并非ABP vNext不可若改造项目&#xff0c;也因历史遗留问题&#xff0c;数据库表设计也可能存在不…

.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

2.2.3 核心模块--配置IConfigurationOptionsASP.NET Core 中的配置&#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?viewaspnetcore-5.0IConfigurationIConfiguration 的使用层级对象配置到 key-value 键值对转换通过环境变量修改日志…