sql常用函数详解(一)——字符串截取

article/2025/9/28 14:09:54

1.substring函数——截取字符串

  SUBSTRING ( expression, start, length )

    expression——字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。

    start——整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。

    length——整数或可以隐式转换为 int 的表达式,指定子字符串的长度

    left(field,length) ——函数返回field最左边的length个长度的字符串

    right(field,length)——函数返回field最右边的length个长度的字符串

eg1:取定长定位置的字符串

select substring('abdcsef',1,3)

result:  abd

 

2.CHARINDEX函数——返回字符或者字符串在另一个字符串中的起始位置

 

CHARINDEX ( expression1 , expression2 [ , start_location ] ) ——  CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。  

CHARINDEX('SQL', 'Microsoft SQL Server')

这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。

eg1:取不定长不同位置的字符串

  

       我们只想要得到'roomno'中的房间号,发现起始字符位置并不是固定的,而且,我们需要的房间号长度也不固定。

此时,我们可以运用‘charindex’这个函数就可以轻松搞定,它是用来定位某个特定字符在该字符串中的位置,即该函数

得到的结果是一个用来表示某个特定字符位置的数字。执行如下代码:

select 
room_stand=substring(roomno,charindex('元',roomno)+1,charindex('室',roomno)-charindex('元',roomno)-1) 
from PROPERTY_room
where roomno like '%单元%室%' 

    result:

3.STUFF函数——删除指定长度的字符,并在指定的起点处插入另一组字符。

STUFF ( character_expression , start , length ,character_expression )

SELECT STUFF('abcde', 2, 3, '123')

   result: a123e

4.patindex函数——返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。

1. PATINDEX ( '%pattern%' , expression )——'%pattern%'的用法类似于 like '%pattern%'的用法,也就是模糊查找其pattern字符串是否是expression找到,找到并返回其第一次出现的位置。

eg1:

select patindex('%abb%','abcaabbeeabb')

结果5,也就是abb第一次出现的位置。

2.PATINDEX ( '%pattern' , expression )——'%pattern' 类似于 like '%pattern'的用法,前面用模糊查找,也就是查找pattern的结束所在expression的位置,也就是从后面匹配起查找。

eg2:

select patindex('%abb','abcaabbeeabb')

返回10,也就是abb在后面第一次出现的位置。

select patindex('%abb','abcaabbeeabbr')

返回0,后面的第一个字母r和abb不匹配,所以返回0

3.PATINDEX ( 'pattern%' , expression )——这就相当于精确匹配查找,也就是pattern,expression完全相等。

eg3:

select patindex('abb%','abbcaabbeeabb')

返回1,也就相当于起始值

select patindex('abb%','arbbcaabbeeabb')

返回0,开头找不到就返回0,后面无论有多少都不管。

4.PATINDEX ( 'pattern' , expression )——这就相当于精确匹配查找,也就是pattern,expression完全相等。

select patindex('abb','abb')

返回1,完全相等

select patindex('abb','abbr')

返回0,不完全相等

5. patindex('%[pattern]%','ddabcaabbeeabbr'),

   patindex('%[^pattern]%','ddabcaabbeeabbr')

在此先说[]的用法,[]是指定某些特殊的字符。[^]除[]之外的字符串,[]这其中的每一个

如:

Symbol Meaning

LIKE '5[%]' 5%

LIKE '[_]n' _n

LIKE '[a-cdf]' a, b, c, d, or f

LIKE '[-acdf]' -, a, c, d, or f

LIKE '[ [ ]' [

LIKE ']' ]

LIKE 'abc[_]d%' abc_d and abc_de

LIKE 'abc[def]' abcd, abce, and abcf

如:

select patindex('%[d]%','rcrdsddddaadadffdr')

返回4,[]中d在字符串rcrdsddddaadadffdr的第一次出现的位置。

select patindex('%[cd]%','rcrdsdddrdaadadffdr')

返回2,[]中c,d在其中一个的位置,返回最先出现的这个位置,c在此字符串里第一次出现位置是2,而d是4,结果取最先的那个。

select patindex('%[sd]%','rcrdsdddrdaadadffdr')

返回4,[]中c,d在其中一个的位置,返回最先出现的这个位置,s在此字符串里第一次出现位置是5,而d是4,结果取最先的那个。

select patindex('%[^r]%','rrrdsdddrdaadadffdr')

返回4,除[]中的字符串的匹配字符,第一次出现d不在[^r]里,所以就找到第一次这位。

select patindex('%[^rd]%','rrrdsdddrdaadadffdr')

返回5,除[]中的字符串的匹配字符,第一次出现s不在[^rd]里,所以就找到第一次这位。

select patindex('%[^rsd]%','rrrdsdddrdaadadffdr')

返回11,除[]中的字符串的匹配字符,第一次出现a不在[^rsd]里,所以就找到第一次这位。

 

 

 

  eg:去除括号及括号内内容(批量化处理)

--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #新建临时表
create table #(col varchar(46))
insert into #
select '重庆唯远实业有限公司(2009年01月05日)' union all
select '江苏苏美达船舶工程有限公司(2009年01月05日)' union all
select '上海启门机电有限公司(2009年01月04日)' union all
select '小洋人生物乳业集团有限公司(2009年01月04日)' union all
select '沈阳鼎冷机电设备有限公司(2009年01月04日)' union all
select '嘉柏(中国)国际货运代理有限公司(2008年12月31日)' union all
select '广州宝洁有限公司(2008年12月31日)' union all
select '烟台华科食品有限公司(2008年12月31日)' union all
select '艾来得机械(上海)有限公司(2008年12月31日)' union all
select '上海晓舟船舶配件有限公司(2008年12月31日)' union all
select '上海力弘包装器材有限公司(2008年12月31日)'/*
------------------------------
重庆唯远实业有限公司
江苏苏美达船舶工程有限公司
上海启门机电有限公司
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏(中国)国际货运代理有限公司
广州宝洁有限公司
烟台华科食品有限公司
艾来得机械(上海)有限公司
上海晓舟船舶配件有限公司
上海力弘包装器材有限公司
*/

解决方案一:

select reverse(stuff(reverse(col), 1, charindex('(', reverse(col)), '')) from #

解决方案二:

update tb
set col = reverse(substring(reverse(col) ,charindex('(',reverse(col)) + 1 , len(col)))
select * from tb

解决方案三:

select 
left(name,patindex('%([0-9][0-9][0-9][0-9]年%',name)-1) as name from [tb]

解决方案四:

select left(col,len(col) - 13) from tb

 


http://chatgpt.dhexx.cn/article/InfjFhqc.shtml

相关文章

sql截取数据

1、left从左开始截取字符串 left(string, length) -- (字符串,截取长度)示例:SELECT id,LEFT(id,4) FROM organization 运行结果: 2、right从右开始截取字符串 right(strin…

sql数据库,截取语句(截取每列中的字段)

制表人也是省事,把这些信息放在一列中,现在需要取红框圈着的数据,有一百多行,操作了十多行,实在是蛋疼,还是用sql搞吧 首先把excel表导入sqlserver中 //表名为“疑点详细说明”,22为姓名身份证…

SQL语句:如何截取指定字段某一个字符的前面/后面的字符串?

假设数据库中,某一列数据像这样,每个数据都有同一个字符“-”,这时如果我们需要获取这个字符的前面的字符串或后面的字符串,应该用什么SQL语句呢? SUBSTRING ( expression, start, length ) --SUBSTRIN…

SQL server 字符串截取

--1、LEFT()方法--- --函数说明--- --1)语法:LEFT(character,integer) --2)介绍:参数1:要截取的字符串,参数2:截取字符个数 --3)使用: --返回从字符串左边开始指定个数…

sql语句之字符串截取(substring_index)

一、substring_index: 实现提取表单列表中的字符串 来源:https://www.cnblogs.com/mqxs/p/7380933.html 1、格式: substring_index(str,delim,count)2、注释: str:要处理的字符串delm:分隔符count&#…

【SQL时间截取】数据库Sql实现截取时间段和日期

【写在前面】前些日子接到这样的需求,我们要对用户访问网站的时间做个统计,但是我想统计到具体的时间点,便于统计不同时间段(上午、下午、傍晚、凌晨)访问的人数占比。 数据库Sql实现截取时间段和日期 1、原始数据查看…

SQL SERVER字符串截取,SQL SERVER根据指定字符截取

字符串截取 字符串截取函数:substring(str,startlen,endlen) 需要截取的字符:str 开始长度:startlen --从1开始 结束长度:endlen -从1开始 用法:select substring(“abcdefg”,1,2) 输出:bc 为啥这么麻烦&…

sql查询中截取字符串

SQL 语句中查询结果字符截取left,right,substrng用法 在SQL的实际用途中,经常会碰到需要对查询结果值需要做字段的一些截取,下面列举经常用到的三种常用截取方式。 1.LEFT(str, length):从左边开始截取str,length是截取的长度&…

sql server提供三种常用截取字符串方法,LEFT()、RIGHT()、SUBSTRING()

一、sql server提供了三种常用截取字符串方法,LEFT()、RIGHT()、SUBSTRING() 1、LEFT()函数语法:LEFT(character,integer) 注释:参数1:要截取的字符串,参数2:截取字符个数说明:返回从字符串左边…

SQL中的字符串截取函数

字符串截取函数,也是我们在数据开发分析的过程中比较常用的函数,比较常用的函数,有四个 left()、right()、substr()、substring_index() 函数。 一、left()函数 含义:返回从字符串左边开始指定个数的字符 语法格式:le…

图像特征提取算法:方向梯度直方图HOG

1.基本介绍 HOG,全称是方向梯度直方图(Histogram Of Gradient),是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。这个特征名字起的也很直白,就是说先计算图片某一区域中不同方向上梯度的值&#…

HOG特征提取算法原理

1.算法基本流程 在一幅图像中,方向梯度直方图(Histogram of Oriented Gradient, HOG)能够很好地描述局部目标区域的特征,是一种常用的特征提取方法,HOGSVM在行人检测中有着优异的效果。在HOG中,对一幅图像进…

sift特征提取算法

简介 SIFT算法是用来提取图像局部特征的经典算法,SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。 主要步骤 …

特征提取算法:HOG,HAAR,LBP

(一)HOG特征 1、HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征…

人脸识别技术中的Gabor特征提取算法

前言 上篇文章中,讲述了语音识别技术中的DTW算法,DTW算法是用于模板匹配的。这篇文章我们将介绍人脸识别中的Gabor特征提取算法,Gabor算法是用在特征提取阶段。我们在这里对比一下语音识别的流程图和人脸识别技术的流程图,以便学…

特征提取算法简单学习笔记

update 2021.04.22 这几年的经验下来,以前以为特征提取的方法时共通的,注意力都在后续算法部分,现在的感受是,不同领域算法反而很多时候时共通的,特征提取差异很大,不能简单的一言以蔽之,这也是…

脑电数据的特征提取算法详解

脑电信号的特征工程。 作者做了什么 做这件事有什么意义 作者是用什么方法去做的 这个方法(思路)的每一步具体怎么操作,每一步都有什么目的,为了解决一个什么样的小问题 在做的过程中,有哪些难点,作者是如何…

特征提取算法(1)——纹理特征提取算法LBP

模式识别中进行匹配识别或者分类器分类识别时,判断的依据就是图像特征。用提取的特征表示整幅图像内容,根据特征匹配或者分类图像目标。 常见的特征提取算法主要分为以下3类: 基于颜色特征:如颜色直方图、颜色集、颜色矩、颜色聚合向量等;基于纹理特征:如Tamura纹理特征、…

深度学习理论——特征提取算法

大家好,继续理论学习,今天介绍几种最常见的特征提取算法。 1.LBP算法(Local Binary Patterns,局部二值模式) LBP算子是一种用来描述图像局部纹理特征的算子,具有灰度不变性。 其主要思想是在目标像素周围…

特征提取算法的总结

在前面的blog中,我们已经讲了SIFT的原理,这里我们再详细讲解SIFT的变体:PCA-SIFT和GLOH。 – Scale invariant feature transform (SIFT): Lowe, 2004. – PCA-SIFT: SIFT: Ke and Sukthankar 2004 Ke and Sukthankar, 2004. – Gradient l…