`
zxlyecf2
  • 浏览: 133517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

把一窜ID存入一个字段,根据某个Id匹配获取符合的记录

    博客分类:
  • sql
 
阅读更多

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中的字符串的搜索、控制、分析很有帮助。


 

  • 大小: 3.4 KB
  • 大小: 4 KB
  • 大小: 3.8 KB
0
2
分享到:
评论

相关推荐

    session 存入数据库

    - **数据表设计**:通常需要设计一个Session相关的数据表,包含字段如Session ID、创建时间、过期时间、用户ID、Session数据(序列化后的字符串)等。 - **序列化与反序列化**:Session对象需要序列化成可存储的格式...

    C#图片转换成二进制流并且保存到sql_server数据库

    你需要创建一个表,包含一个或多个字段来存储这些数据。然后,使用`SqlCommand`执行INSERT语句。 ```csharp string insertQuery = "INSERT INTO Images (ImageData) VALUES (@ImageData)"; SqlCommand command =...

    16337233(王凯祺)数据库系统实验61

    它会遍历所有的选课记录(通过自然连接takes表和course表),找出所有成绩不为空且成绩不是"F"的记录,然后根据这些记录计算每个学生(ID匹配)的总学分,并将结果更新到student表的tot_cred字段。在完成更新后,...

    数据库mysql+oracle面试题

    - **示例**: 假设有一个“顾客”表,其中包括“姓名”、“编号”、“地址”等字段。如果“地址”列包含了“国家”、“省份”、“城市”和“街道”等信息,则不符合第一范式。正确的做法是将“地址”拆分为多个列,如...

    Oracle中通过触发器来追踪用户的活动

    在设计跟踪用户活动的审计系统时,首先需要创建一个用户审计表来存储触发器收集的信息。审计表应包含的关键字段有: 1. 用户ID:执行登录操作的用户的唯一标识。 2. 会话ID:Oracle为每个用户会话分配的唯一标识符...

    jQuery 获取遍历获取table中每一个tr中的第一个td的方法

    当需要对表格中的数据进行处理,比如获取每一行(tr)中的第一个单元格(td)的数据时,使用jQuery能够非常方便地实现这一需求。jQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画...

    爬取在线课程并存入MySQL数据库

    在MySQL中,我们可以创建一个“courses”表,包含字段如course_id(课程ID)、title(课程名称)、instructor(讲师)、description(课程描述)、rating(评分)等。如果课程有多个章节或视频,可以考虑创建一个...

    TreeView的递归绑定

    - 对于权限判断,通过另一个`Admin_UserrightApp`对象获取登录用户的权限,然后遍历这些权限,如果节点对应`NodeId`与权限中的`NodeId`匹配,将节点设置为选中状态。 4. **性能优化**: - 在`InitTree`函数中,...

    Visual FoxPro数据库函数.docx

    5. ASESSIONS(): 创建一个数组,包含了现有的数据工作期ID,有助于跟踪和管理不同的数据访问上下文。 6. ATAGINFO(): 该函数创建一个数组,包含索引和键表达式的名字、数量和类型信息,对于索引管理和优化查询性能...

    jsp购物车课程设计(含代码截图)

    在"jsp购物车课程设计"中,我们主要关注的是构建一个基于JSP技术的在线购物系统,其中包括购物车的功能。这个设计涵盖了数据库操作、用户登录验证、商品浏览、添加到购物车、结算等核心功能。通过提供的代码片段,...

    Score_Entry_System.rar

    开发者需要创建一个表单,包含学生的姓名、学号和各科成绩等字段。通过Express的路由处理POST请求,接收到前端提交的数据,然后利用MySQL的`INSERT INTO`语句将数据存入数据库。例如: ```javascript app.post('/...

    Python实现通讯录功能

    1. 添加用户信息:这部分的实现涉及到接收用户输入的ID、姓名、年龄、地址和薪水,然后构造一个SQL插入语句来将这些数据存入数据库。在插入数据前,需要判断输入数据的格式是否正确,并在插入成功后给出提示。 2. ...

    Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

    每个向量将作为一个条目存储,可能还包括相关的人脸ID或其他元数据。在Python中,我们可以使用像`sqlite3`或`pymysql`这样的库来操作数据库。 5. **相似度计算**:比对提交图片中的人脸信息时,会计算新检测到的...

    java小项目

    加好友功能需要在两个用户之间建立关系,可以在数据库中创建一个用户关系表,存储用户ID和好友ID。删除好友时,从关系表中移除对应条目。为了防止误操作,可以添加确认提示。 4. 消息点赞与评论 点赞功能可以通过...

    uniapp使用微信小程序云数据库实现一对一实时聊天

    - **消息存储**:发送的消息存入云数据库,每个聊天室对应一个消息集合,消息包含发送者ID、接收者ID、消息内容等字段。 - **实时监听**:使用云数据库的实时监听功能,当一条新消息插入时,发送方和接收方都能...

    geometry类型与数据库做映射的包

    本项目中提到的"geometry类型与数据库做映射的包"很可能是Hibernate Spatial,它是Hibernate的一个插件,提供了对空间数据类型的支持,使得我们可以将geometry对象无缝地存入支持空间数据的数据库,如PostGIS(基于...

    SQL语句基础(Sqlite).pdf

    表中的每一行代表一个记录,每一列代表一个字段,字段相当于通常记录中的一个数据项。SQLite支持多种字段类型,如字符串型(varchar)、整型(int)、浮点型(float)、双精度浮点型(double)等。 创建表是将表...

    功能说明-46-SD-银行信息传输接口-XXXX0817-V1-1.doc

    接口程序根据用户输入的公司代码、利润中心组和截止时间,通过调用WEBSERVICE从远光系统获取银行收款信息,然后将数据存入自建表中。主要使用者包括营销中心、产业部门和财务部门的工作人员。 3. **使用频率**: ...

    C语言实现学生信息管理系统

    1. **数据结构**:为了存储学生信息,我们需要定义一个数据结构来容纳姓名、学号、成绩等字段。这通常可以通过创建结构体(struct)来完成。例如: ```c struct Student { char name[50]; int id; float score;...

    android 多任务多线程断点下载.pdf

    它打开数据库,执行SQL查询,根据`downpath`字段匹配记录,然后将结果存储在一个HashMap中,键为线程ID,值为已下载长度。 2. `save(String path, Map, Integer> map)`方法用于保存每个线程的下载进度。在开始一个...

Global site tag (gtag.js) - Google Analytics