1.查询出所有记录的ID字符串字段 CredentialsNo
2. 使用PATINDEX 函数来获取
SELECT CredentialsNo FROM Archives_Info as a where PATINDEX('%2%',a.CredentialsNo)>0
SELECT CredentialsNo FROM Archives_Info as a where PATINDEX('%,2,%',','+a.CredentialsNo+',')>0
3. 使用charindex 来实现
SELECT CredentialsNo FROM Archives_Info as a where charindex(','+cast(2 as varchar(20))+',',','+a.[CredentialsNo]+',')>0
4. 使用concat
SELECT CredentialsNo FROM Archives_Info as a where concat(',',a.CredentialsNo,',') like '%,6,%'
charindex 和 PATINDEX的区别
如何使用CHARINDEX函数
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
接下来,我们看这个CHARINDEX命令:
CHARINDEX('7.0', 'Microsoft SQL Server 2000')
在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。
接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。
第一个例子,假设你要显示Northwind数据库Customer表前5行联系人列的Last Name。这是前5行数据
ContactName
------------------------------
Maria Anders
Ana Trujillo
Antonio Moreno
Thomas Hardy
Christina Berglund
你可以看到,CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开。我用CHARINDX函数确定两个名字中间空格的位置。通过这个方法,我们可以分析ContactName列的空格位置,这样我们可以只显示这个列的last name部分。这是显示Northwind的Customer表前5行last name的记录!
select top 5 substring(ContactName,charindex(' ',ContactName)+1 ,
len(ContactName)) as [Last Name] from Northwind.dbo.customers
下面是这个命令输出的结果。
Last Name
------------------------------
Anders
Trujillo
Moreno
Hardy
Berglund
CHARINDEX函数找到First Name和Last Name之间的空格,所以SUBSTRING函数可以分开ContactName列,这样就只有Last Name被选出。我在CHARINDEX函数返回的整数上加1,这样Last Name不是从空格开始。
在第二个例子中,即如说你要计算记录中,某一个字段包含特定字符的所有记录数。CHARINDEX函数可以方便的解决你的问题。计算Northwind.dbo.Customer表中Addresses字段中包含单词Road或者它的缩写Rd的记录数,选择语句类似这样:
SELECT count(*) from Northwind.dbo.Customers
WHERE CHARINDEX('Rd',Address) > 0 or CHARINDEX('Road',Address)> 1
如何使用PATINDEX函数
PATINDEX函数返回字符或者字符串在另一个字符串或者表达式中的起始位置,PATINDEX函数支持搜索字符串中使用通配符,这使PATINDEX函数对于变化的搜索字符串很有价值。PATINDEX函数的命令如下:
PATINDEX ( '%pattern%' , expression )
Pattern是你要搜索的字符串,expression是被搜索的字符串。一般情况下expression是一个表中的一个字段,pattern的前后需要用“%”标记,除非你搜索的字符串在被收缩的字符串的最前面或者最后面。
和CHARINDEX函数一样,PATINDEX函数返回搜索字符串在被搜索字符串中的起始位置。假如有这样一个PATINDEX函数:
PATINDEX('%BC%','ABCD')
这个PATINDEX函数返回的结果是2,这和CHARINDEX函数一样。这里的%标记告诉PATINDEX函数去找字符串“BC”,不管被搜索的字符串中在“BC”的前后有多少字符!
假如你想知道被搜索字符串是否由特定的字符串开始,你可以省去前面的%标记。PATINDED函数就要这样写:
PATINDEX('AB%','ABCD')
这个命令执行的结果返回1,表示搜索的字符串“AB”在被搜索的字符串中“ABCD”被找到。
使用通配符可以编辑比我以上举得简单例子复杂得多的搜索字符串。假如说你要确定一个字符串是否包含字母A和Z,还有任何数字,这个PARINDEX函数命令可能像这样:
PATINDEX('%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%','XYZABC123')
注意在上面这个例子中的搜索字符部分使用了很多的通陪符。察看SQL Server联机丛书可以获得更多关于通佩符的信息。接下来,我们用两个例子来看PATINDEX和SELECT怎么联合起来使用。
假设你想要找出Northwind.dbo.Categories表中Description字段中是包含单词“Bread”或“bread”的所有记录,那么选择语句就可能是这样:
SELECT Description from Northwind.dbo.Categories
WHERE patindex('%[b,B]read%',description) > 0
这里我用通配符来确定大写和小写的“b”。我在Notthwind数据库中执行这个脚本后,得到下面的结果:
Description
--------------------------------------------------------
Desserts, candies, and sweet breads
Breads, crackers, pasta, and cereal
这是再用另外一个额外的通配符来查找一些记录的例子。这个例子是如何选出上面的查询结果中,Description字段的第二子字母不是“e”的纪录。
select Description from Northwind.dbo.Categories
where patindex('%[b,B]read%',description) > 0
and patindex('_[^e]%',description) = 1
通过在条件语句中增加一个使用^通配符的PATINDEX函数,我们可以过滤掉“Dessert, candies, and sweet breads”这条记录。上面的查询结果只有一条记录。
Description
--------------------------------------------------------
Breads, crackers, pasta, and cereal
总结
你现在可以发现CHARINDEX和PATINDEX搜索字符串时的区别了吧。PATINDEX函数支持使用通配符,可以用在很多有变化的查找中。而CHARINDEX不可以。根据你自己不同的情况,这两个函数对你在SQL Server中的字符串的搜索、控制、分析很有帮助。
相关推荐
- **数据表设计**:通常需要设计一个Session相关的数据表,包含字段如Session ID、创建时间、过期时间、用户ID、Session数据(序列化后的字符串)等。 - **序列化与反序列化**:Session对象需要序列化成可存储的格式...
你需要创建一个表,包含一个或多个字段来存储这些数据。然后,使用`SqlCommand`执行INSERT语句。 ```csharp string insertQuery = "INSERT INTO Images (ImageData) VALUES (@ImageData)"; SqlCommand command =...
它会遍历所有的选课记录(通过自然连接takes表和course表),找出所有成绩不为空且成绩不是"F"的记录,然后根据这些记录计算每个学生(ID匹配)的总学分,并将结果更新到student表的tot_cred字段。在完成更新后,...
- **示例**: 假设有一个“顾客”表,其中包括“姓名”、“编号”、“地址”等字段。如果“地址”列包含了“国家”、“省份”、“城市”和“街道”等信息,则不符合第一范式。正确的做法是将“地址”拆分为多个列,如...
在设计跟踪用户活动的审计系统时,首先需要创建一个用户审计表来存储触发器收集的信息。审计表应包含的关键字段有: 1. 用户ID:执行登录操作的用户的唯一标识。 2. 会话ID:Oracle为每个用户会话分配的唯一标识符...
当需要对表格中的数据进行处理,比如获取每一行(tr)中的第一个单元格(td)的数据时,使用jQuery能够非常方便地实现这一需求。jQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画...
在MySQL中,我们可以创建一个“courses”表,包含字段如course_id(课程ID)、title(课程名称)、instructor(讲师)、description(课程描述)、rating(评分)等。如果课程有多个章节或视频,可以考虑创建一个...
- 对于权限判断,通过另一个`Admin_UserrightApp`对象获取登录用户的权限,然后遍历这些权限,如果节点对应`NodeId`与权限中的`NodeId`匹配,将节点设置为选中状态。 4. **性能优化**: - 在`InitTree`函数中,...
5. ASESSIONS(): 创建一个数组,包含了现有的数据工作期ID,有助于跟踪和管理不同的数据访问上下文。 6. ATAGINFO(): 该函数创建一个数组,包含索引和键表达式的名字、数量和类型信息,对于索引管理和优化查询性能...
在"jsp购物车课程设计"中,我们主要关注的是构建一个基于JSP技术的在线购物系统,其中包括购物车的功能。这个设计涵盖了数据库操作、用户登录验证、商品浏览、添加到购物车、结算等核心功能。通过提供的代码片段,...
每个向量将作为一个条目存储,可能还包括相关的人脸ID或其他元数据。在Python中,我们可以使用像`sqlite3`或`pymysql`这样的库来操作数据库。 5. **相似度计算**:比对提交图片中的人脸信息时,会计算新检测到的...
本项目中提到的"geometry类型与数据库做映射的包"很可能是Hibernate Spatial,它是Hibernate的一个插件,提供了对空间数据类型的支持,使得我们可以将geometry对象无缝地存入支持空间数据的数据库,如PostGIS(基于...
开发者需要创建一个表单,包含学生的姓名、学号和各科成绩等字段。通过Express的路由处理POST请求,接收到前端提交的数据,然后利用MySQL的`INSERT INTO`语句将数据存入数据库。例如: ```javascript app.post('/...
1. 添加用户信息:这部分的实现涉及到接收用户输入的ID、姓名、年龄、地址和薪水,然后构造一个SQL插入语句来将这些数据存入数据库。在插入数据前,需要判断输入数据的格式是否正确,并在插入成功后给出提示。 2. ...
加好友功能需要在两个用户之间建立关系,可以在数据库中创建一个用户关系表,存储用户ID和好友ID。删除好友时,从关系表中移除对应条目。为了防止误操作,可以添加确认提示。 4. 消息点赞与评论 点赞功能可以通过...
- **消息存储**:发送的消息存入云数据库,每个聊天室对应一个消息集合,消息包含发送者ID、接收者ID、消息内容等字段。 - **实时监听**:使用云数据库的实时监听功能,当一条新消息插入时,发送方和接收方都能...
表中的每一行代表一个记录,每一列代表一个字段,字段相当于通常记录中的一个数据项。SQLite支持多种字段类型,如字符串型(varchar)、整型(int)、浮点型(float)、双精度浮点型(double)等。 创建表是将表...
接口程序根据用户输入的公司代码、利润中心组和截止时间,通过调用WEBSERVICE从远光系统获取银行收款信息,然后将数据存入自建表中。主要使用者包括营销中心、产业部门和财务部门的工作人员。 3. **使用频率**: ...
1. **数据结构**:为了存储学生信息,我们需要定义一个数据结构来容纳姓名、学号、成绩等字段。这通常可以通过创建结构体(struct)来完成。例如: ```c struct Student { char name[50]; int id; float score;...
它打开数据库,执行SQL查询,根据`downpath`字段匹配记录,然后将结果存储在一个HashMap中,键为线程ID,值为已下载长度。 2. `save(String path, Map, Integer> map)`方法用于保存每个线程的下载进度。在开始一个...