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

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

时间:2023-11-28 11:15:11浏览次数:51  
标签:返回 字符 中文 -- SQLServer ISNUMERIC str 字符串

转载自:SQLServer字符串查找(判断字符串是否含中文,数字或字母),并把是否含中文作为条件来执行一些操作 - 亟待! - 博客园 (cnblogs.com)

从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

但是,该函数有个缺点!

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

当含有美元符、加减号、逗号等符号时,或者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

 

 

 

标签:返回,字符,中文,--,SQLServer,ISNUMERIC,str,字符串
From: https://www.cnblogs.com/kezhang/p/17861417.html

相关文章

  • java 为解决导入部门名称是中文,部门名称转换成部门ID
    一、业务实现:(Server层)/***为解决导入部门名称是中文,部门名称转换成部门ID*key:部门名称*value:部门ID**/Map<String,Integer>getOrgNameToIdMapping();二、业务层(SercerImpl)/***为解决导入部门名称是中文,部门名称转换成部......
  • 数字人中文数据集
    中文数据集: https://www.vipazoo.cn/CMLR.html Downloads TheCMLRdatasetispublictouniversitiesandresearchinstitutesforresearchpurposeonly.BeforeusingtheCMLRdataset,youarerecommendedtorefertothefollowingpaper: [1]YaZhao,RuiX......
  • C++ 查找文本文件中字符串是否存在
    简介查找文本文件中字符串是否存在代码#include<iostream>#include<fstream>#include<vector>#include<string>usingnamespacestd;boolSearchString(stringfilePath,stringstrF){vector<string>lines;stringline;ifst......
  • C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转
    简介字符串编码转换封装函数,UTF-8编码与本地编码互转。中文乱码的解决方法有时候我们会遇到乱码的字符串,比如:古文码可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(stringstr)函数转换一下就可以了。口字码可能是因为以UTF-8的方式读取GBK编码的中文导致的,用下面......
  • C++ 33.C++中的字符串类-狄泰软件学院
    C语言字符串的历史C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型,因此无法创建字符串类型当年C语言主要用于开发UNIX操作系统,处理字符串的情况少,所以在当时的背景下没有让C语言中内置一个字符串类型。后来C语言越用越广泛,没办法只能......
  • 数据的处理——字符串的拼接
    #1.直接用运算符拼接s1='holle's2='world'print(s1+s2)print('-'*20)#2.用字符串join()方法print(''.join([s1,s2]))#holleworld,这里是用空字符拼接,拼接的内容可以随意定义例如print('*'.join([s1,s2]))#输出结果为:holle*worldprint('-'*20)#3......
  • 字符串格式化站位 ——format
    s='helloworld'print('{0:*<20}'.format(s))#0是format的索引并且format的元素只有一个,输出字符串左对齐,右边补充以20为单位的*#结果为:helloworld**********print('{0:*>20}'.format(s))#结果为:**********helloworldprint('{0:*^20}'.format(s))#输出结果为:****......
  • 字符串的解码和编码
    #str表示字符串类型转为bytes类型(二进制类型)s='伟大的中国梦'scode=s.encode(errors='replace')#默认是utf-8,因为utf-8每个中文占3个字节print(scode)#所以输出18位字节#输出结果为:\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa2\xa6#用_gbk方式s......
  • NSIS_XML_插件中文帮助文档
     XMLNSIS插件v2.02008年ShengaltsAleksander,网名Instructor([email protected])目录 1.使用说明 2.插件特性 3.特殊字符 4.XML文件示例 5.插件函数 文件格式 ${xml::SetCondenseWhiteSpace}"[1|0]" ${xml::SetEncod......
  • scrapy爬取数据并保存中文
    通过前面的学习拿到数据问题不大,本帖是记录如何保存到文件以及保存成中文的操作。1,bqb.py爬虫文件实例代码'''---------------------------------#@Date:2023-10-2516:39:05#@Author:Devin#@LastModified:2023-11-2716:26:06-----------------------------------......