从sqlserver中提取数据如何截取字符





1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;

2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;

3、LEFT(str, length):从左边开始截取str,length是截取的长度;

4、RIGHT(str, length):从右边开始截取str,length是截取的长度;

5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;

6、SUBSTRING(str ,n ,m):返回字符串str从第n个字符截取到第m个字符;

7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;

8、LENGTH(str):计算字符串str的长度。

是否包含中文基本原理:字符的 unicode编码范围。

0~9 : 48~57
A~Z :65 ~ 90
a~z : 97~ 122

–汉字unicode编码范围:[0x4e00,0x9fa5](或十进制[19968,40869])



SELECT * FROM dbo.person  WHERE UNICODE(字段) BETWEEN 19968 AND 40869


判断字符串中含有中文 :SELECT * FROM tb WHERE PATINDEX('%[啊-座]%',FieldName)>0

或: SELECT * FROM tb WHERE PATINDEX('%[吖-座]%',FieldName)>0

注意:N'%[吖-座]%' 不适用于英文版或国外的SQLServer环境。 (<0 不含中文)

通用性 最好的还是   UNICODE(字段) BETWEEN 19968 AND 40869 ,但不好做判断



-- 判断是否不含中文
IF( select top(1) PATINDEX(N'%[吖-座]%',Description) From ZZZ_Aegis_ADSN ) <=0
select 1
else
select 0




/* 判断是否包含中文,并把是否含中文作为条件来执行一些操作  */
IF( select top(1) PATINDEX('%[吖-座]%',ApplyName) From [B_00TEST] ) >0
select 1
else select 0

--这个不能作为IF的条件,只能查询到具体信息
SELECT top(1) * FROM [B_00TEST] WHERE PATINDEX(N'%[吖-座]%',ApplyName) <=0

IF( UNICODE(N'啊111') BETWEEN 19968 AND 40869 ) select 1 else select 0

IF( UNICODE(N'Abc111') BETWEEN 19968 AND 40869 ) select 1 else select 0 --中文''前面要加N


通配符:[]

FieldName like '[a-zA-Z]%'  --------- ([]指定值的范围)

FieldName like '[ ^ F-M]%'    --------- (^排除指定范围)

SQLServer中判断是否包含数字

sql2005有个函数ISNUMERIC(expression)函数:当expression为数字时,返回1,否则返回0。这只是一个菜鸟级的解决办法,大多数情况比较奏效。

eg:



select ISNUMERIC('123') --结果为1


但是,该函数有个缺点!

eg:



SQLServer字符串查找(判断字符串是否含中文,数字或字母),并把是否含中文作为条件来执行一些操作_子串

SELECT 
,ISNUMERIC('-') as '-' --1
,ISNUMERIC('+') as '+' --1
,ISNUMERIC('$') as '$' --1
,ISNUMERIC('.') as '.' --1
,ISNUMERIC(',') as ',' --1
,ISNUMERIC('\') as '\' --1
,ISNUMERIC('2D3') AS '2D3'--1
,ISNUMERIC('1d1') AS '1d1'--1
,ISNUMERIC('1e1') AS '1e1'--1
,ISNUMERIC('d') AS 'd' --0


SQLServer字符串查找(判断字符串是否含中文,数字或字母),并把是否含中文作为条件来执行一些操作_子串


当含有美元符、加减号、逗号等符号时,或者D、E的前后均出现数字时,也会返回1,这就比较头疼了。标点符号倒是好理解,为什么d,e这种情况,真是不理解微软设计的意图。

有什么好的解决办法吗?当然了,请看下面

方法:通配符。高逼格使用。

适用场景:2005及以上(2005之前的版本没试过,应该也支持)



--返回0-则为纯数字(支持正负数,小数点)
SELECT PATINDEX('%[^0-9|.|-|+]%','2.2')--返回0

--返回0-则为纯整数
select PATINDEX('%[^0-9]%', '2.2') --返回 非0的位置


SQLserver中字符串查找功能patindex和charindex的区别

SQL server中patindexh和charindex函数,都可以在一段字符中搜索字符或字符串。

主要区别在:patindex函数支持使用通配符来进行搜索,charindex不支持通配符。

一、patindex函数

语法格式:patindex ( %pattern% , expression )

pattern:是要搜索的字符串

expression:是被搜索的字符串。

patindex函数返回字符或字符串在另一个字符串或表达式中的起始位置。

patindex函数支持搜索字符串中使用通配符,这也是patindexh和charindex函数主要的区别。

例:

patindex(%bc%,abcd) --返回:2

patindex(ab%,abcd) --返回:1

SQL中可以使用的通配符有:

1、%,替代一个或多个字符

2、_,仅替代一个字符

3、[charlist],字符列中的任何单一字符

4、[^charlist]或者[!charlist],不在字符列中的任何单一字符

二、charindex 函数

语法格式:charindex ( expression1 , expression2 [ , start_location ] )

expression1:是在expression2中寻找的字符

start_location:是charindex函数开始在expression2中找expression1的位置

charindex函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如charindex没有找到要找的字符串,那么函数整数0。

例:

charindex(sql, microsoft sql server) --返回:11

charindex(7.0, microsoft sql server 2000) --返回:0


人生只若初见................








1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;

2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;

3、LEFT(str, length):从左边开始截取str,length是截取的长度;

4、RIGHT(str, length):从右边开始截取str,length是截取的长度;

5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;

6、SUBSTRING(str ,n ,m):返回字符串str从第n个字符截取到第m个字符;

7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;

8、LENGTH(str):计算字符串str的长度。

是否包含中文基本原理:字符的 unicode编码范围。

0~9 : 48~57
A~Z :65 ~ 90
a~z : 97~ 122

–汉字unicode编码范围:[0x4e00,0x9fa5](或十进制[19968,40869])



SELECT * FROM dbo.person  WHERE UNICODE(字段) BETWEEN 19968 AND 40869


判断字符串中含有中文 :SELECT * FROM tb WHERE PATINDEX('%[啊-座]%',FieldName)>0

或: SELECT * FROM tb WHERE PATINDEX('%[吖-座]%',FieldName)>0

注意:N'%[吖-座]%' 不适用于英文版或国外的SQLServer环境。 (<0 不含中文)

通用性 最好的还是   UNICODE(字段) BETWEEN 19968 AND 40869 ,但不好做判断



-- 判断是否不含中文
IF( select top(1) PATINDEX(N'%[吖-座]%',Description) From ZZZ_Aegis_ADSN ) <=0
select 1
else
select 0




/* 判断是否包含中文,并把是否含中文作为条件来执行一些操作  */
IF( select top(1) PATINDEX('%[吖-座]%',ApplyName) From [B_00TEST] ) >0
select 1
else select 0

--这个不能作为IF的条件,只能查询到具体信息
SELECT top(1) * FROM [B_00TEST] WHERE PATINDEX(N'%[吖-座]%',ApplyName) <=0

IF( UNICODE(N'啊111') BETWEEN 19968 AND 40869 ) select 1 else select 0

IF( UNICODE(N'Abc111') BETWEEN 19968 AND 40869 ) select 1 else select 0 --中文''前面要加N


通配符:[]

FieldName like '[a-zA-Z]%'  --------- ([]指定值的范围)

FieldName like '[ ^ F-M]%'    --------- (^排除指定范围)

SQLServer中判断是否包含数字

sql2005有个函数ISNUMERIC(expression)函数:当expression为数字时,返回1,否则返回0。这只是一个菜鸟级的解决办法,大多数情况比较奏效。

eg:



select ISNUMERIC('123') --结果为1


但是,该函数有个缺点!

eg:



SQLServer字符串查找(判断字符串是否含中文,数字或字母),并把是否含中文作为条件来执行一些操作_子串

SELECT 
,ISNUMERIC('-') as '-' --1
,ISNUMERIC('+') as '+' --1
,ISNUMERIC('$') as '$' --1
,ISNUMERIC('.') as '.' --1
,ISNUMERIC(',') as ',' --1
,ISNUMERIC('\') as '\' --1
,ISNUMERIC('2D3') AS '2D3'--1
,ISNUMERIC('1d1') AS '1d1'--1
,ISNUMERIC('1e1') AS '1e1'--1
,ISNUMERIC('d') AS 'd' --0


SQLServer字符串查找(判断字符串是否含中文,数字或字母),并把是否含中文作为条件来执行一些操作_子串


当含有美元符、加减号、逗号等符号时,或者D、E的前后均出现数字时,也会返回1,这就比较头疼了。标点符号倒是好理解,为什么d,e这种情况,真是不理解微软设计的意图。

有什么好的解决办法吗?当然了,请看下面

方法:通配符。高逼格使用。

适用场景:2005及以上(2005之前的版本没试过,应该也支持)



--返回0-则为纯数字(支持正负数,小数点)
SELECT PATINDEX('%[^0-9|.|-|+]%','2.2')--返回0

--返回0-则为纯整数
select PATINDEX('%[^0-9]%', '2.2') --返回 非0的位置


SQLserver中字符串查找功能patindex和charindex的区别

SQL server中patindexh和charindex函数,都可以在一段字符中搜索字符或字符串。

主要区别在:patindex函数支持使用通配符来进行搜索,charindex不支持通配符。

一、patindex函数

语法格式:patindex ( %pattern% , expression )

pattern:是要搜索的字符串

expression:是被搜索的字符串。

patindex函数返回字符或字符串在另一个字符串或表达式中的起始位置。

patindex函数支持搜索字符串中使用通配符,这也是patindexh和charindex函数主要的区别。

例:

patindex(%bc%,abcd) --返回:2

patindex(ab%,abcd) --返回:1

SQL中可以使用的通配符有:

1、%,替代一个或多个字符

2、_,仅替代一个字符

3、[charlist],字符列中的任何单一字符

4、[^charlist]或者[!charlist],不在字符列中的任何单一字符

二、charindex 函数

语法格式:charindex ( expression1 , expression2 [ , start_location ] )

expression1:是在expression2中寻找的字符

start_location:是charindex函数开始在expression2中找expression1的位置

charindex函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如charindex没有找到要找的字符串,那么函数整数0。

例:

charindex(sql, microsoft sql server) --返回:11

charindex(7.0, microsoft sql server 2000) --返回:0