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找到,找到并返回其第一次出现的位置。
select patindex('%abb%','abcaabbeeabb')
结果5,也就是abb第一次出现的位置。
2.PATINDEX ( '%pattern' , expression )——'%pattern' 类似于 like '%pattern'的用法,前面用模糊查找,也就是查找pattern的结束所在expression的位置,也就是从后面匹配起查找。
select patindex('%abb','abcaabbeeabb')
返回10,也就是abb在后面第一次出现的位置。
select patindex('%abb','abcaabbeeabbr')
返回0,后面的第一个字母r和abb不匹配,所以返回0
3.PATINDEX ( 'pattern%' , expression )——这就相当于精确匹配查找,也就是pattern,expression完全相等。
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
1.substring函数——截取字符串 SUBSTRING ( expression, start, length ) expression——字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。 start——整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。 length——整数或可以隐式转换为 int 的表达式...
结果:09
3、SUBSTRING(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符
SELECT SUBSTRING('成都融资事业部',5,3)
结果:事业部
4、SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符
SELECT SUBSTRING('成都融资事业部',3)
结果:融资事业部
SQL 语句中查询结果字符截取left,right,substrng用法
在SQL的实际用途中,经常会碰到需要对查询结果值需要做字段的一些截取,下面列举经常用到的三种常用截取方式。
1.LEFT(str, length):从左边开始截取str,length是截取的长度;
2.RIGHT(str,length):从右边开始截取str,length是截取的长度;
3.SUBSTRING(str,n ,m):返回字符串str从第n个字符截取到第m个字符;
......
A.截取从字符串左边开始N个字符 Declare @S1 varchar(100) Select @S1=’http://www.xrss.cn’ Select Left(@S1,4) ———————————— 显示结果: http B.截取从字符串右边开始N个字符(例如取字符www.163.com) Declare @S1 varchar(100) Select @S1=’http://www.163.com’ Select right(@S1,11) ———————————— 显示结果: www.163.com C.截取字符串中任意位置及长度(例如取字符www) Declare @S1 v
1.left(str,len)截取左边的len个字符,right(str,len)截取右边的len个字符;
eg: select left(‘每天都要开心’,2)
Result: ‘每天’
2.substring(str,n)截取str从第n个字符开始之后的所有字符;
eg: select substring(‘每天都要开心’,3);
Result: ‘都要开心’
3.substring(str,-n)截取str倒数第n个字符开始之后的所有字符;
eg: select substring(‘每天
截取字符串常用函数1、LEFT ( )2、RIGHT ( )3、SUBSTRING ( )
1、LEFT ( )
\quad \quad从字符串最左边开始截取即正向截取,返回从字符串左边开始指定个数的字符。
LEFT ( character_expression , integer_expression)
character_expression:源字符串 ,
integer_expression :要截取最左边的字符数
select left('SQL_Server',2 )
### 回答1:
SQL Server提供了多个函数来截取指定字符串,其中最常用的是SUBSTRING函数。SUBSTRING函数可以从一个字符串中截取出一部分子字符串。
其语法如下:
SUBSTRING(string, start, length)
其中,string表示要被截取的字符串,start表示要截取的起始位置,length表示要截取的长度。下面是这些参数的具体含义:
- string:要截取的字符串,必须是字符型。
- start:要截取的起始位置,可以是整数型、小数型或字符型。如果是小数型,则自动转为整数。
- length:要截取的长度,可以是整数型、小数型或字符型。如果是小数型,则自动转为整数。如果省略该参数,则截取从start位置开始的所有字符。
需要注意的是,SQL Server的SUBSTRING函数和其他数据库或编程语言中的类似函数有所不同,在几个方面有自己独特的特点,例如:
1. 起始位置是从1开始计数的,而不是从0;
2. 如果start的值比string的长度小,那么截取的起始位置就是start,否则返回空值;
3. 如果length的值小于等于0,那么返回空值;
4. 截取的长度不能超过string的长度。
SELECT SUBSTRING('Hello World', 2, 3)
--输出结果:ell
说明:截取从第2个字符开始的长度为3的子字符串。
SELECT SUBSTRING('Hello', 2)
--输出结果:ello
说明:截取从第2个字符开始的所有字符。
SELECT SUBSTRING('Hello', 7)
--输出结果:空值
说明:截取的起始位置超出了字符串的长度,因此返回空值。
通过使用SUBSTRING函数,你可以轻松地截取指定字符串。当然,除了SUBSTRING函数,SQL Server还支持其他字符串截取函数,如LEFT、RIGHT、PATINDEX、CHARINDEX等等,根据不同的需求,可以灵活运用这些函数来进行字符串操作。
### 回答2:
### 回答3: