首页 > 数据库 >SQL Server 中CHARINDEX的用法

SQL Server 中CHARINDEX的用法

时间:2023-06-25 11:57:32浏览次数:37  
标签:函数 Server CHARINDEX 搜索 SQL 字符串

SQL Server 中的 CHARINDEX 函数对于处理和操作字符串数据很有用。 它最常用于定位字符串中子字符串或表达式的开始位置。 简单来说,我们可以说这个函数用于从指定位置搜索字符串中的指定字符或字符。 一个字符可以出现在字符串中的多个位置。 此函数将返回字符串中的第一个字符位置并忽略其余匹配的字符位置。

让我们通过下面的例子来理解这个函数的概念。

招聘公司的在线门户是解释其概念的一个很好的例子。 招聘公司会收集每个学生或客户的详细信息,并为他们提供安置帮助。 假设公司老板需要查看每个员工的电子邮件地址格式是否正确; 在这种情况下,他们可以通过使用CHARINDEX()函数来做到这一点。 例如,他们可以验证字符 '@' 是否存在于输入的邮件 ID 中。

用法
以下是说明 SQL Server 中 CHARINDEX 函数的基本语法:

CHARINDEX ( expression_to_find , expression_to_search [ , starting_position ] )
我们可以在CHARINDEX函数中看到如下参数:

expression_to_find:它是定义我们要在另一个字符串中查找的字符或字符串的必需参数。

expression_to_search:它是一个必需参数,指示我们将在其中搜索子字符串的字符串或表达式。

starting_position:这是一个可选参数,它采用整数值来指定搜索字符串的起始位置。 如果我们想在给定的字符串中搜索子字符串,我们需要指定一个起始位置。 但是,如果我们不为此参数指定值,则默认情况下,它将从索引位置 0 开始搜索。 如果我们将其指定为 0 或负值,该函数也将从头开始搜索字符串。

返回
此函数返回给定表达式或字符串中子字符串的位置。
如果子字符串不包含在字符串中,该函数将返回 0。

支持的版本
CHARINDEX 函数将适用于以下 SQL Server 版本:

SQL Server 2019、SQL Server 2018、SQL Server 2017、SQL Server 2016、SQL Server 2014、SQL Server 2012、SQL Server 2008 R2、SQL Server 2008、SQL Server 2005、Azure SQL 数据库、Azure SQL 数据仓库和并行数据仓库.

注意:CHARINDEX 函数可以在不打扰区分大小写或不区分大小写的字符的情况下执行搜索。

CHARINDEX 函数示例

让我们了解 CHARINDEX 函数在 SQL Server 中的工作原理。

1. CHARINDEX 函数用于单次搜索

下面的示例将使用 CHARINDEX 函数在给定的字符串 'SQL Tutorial Javatpoint' 中找到一个搜索字符串 'SQL' 并返回其位置:

SELECT CHARINDEX('SQL', 'SQL Tutorial Javatpoint') AS Position;
执行该语句将显示以下输出 :

SQL Server CHARINDEX() Function

2. 搜索字符串中的一个字符位置

此示例将给出 @ 字符在指定电子邮件地址中的位置。

SELECT CHARINDEX ('@','[email protected]') as 'CharacterPosition'
执行该语句将显示以下输出 :

SQL Server CHARINDEX() Function

3.在字符串中执行不区分大小写的搜索

此示例将返回指定字符串中搜索字符串的位置,而无需区分大小写:

SELECT CHARINDEX('SERVER', 'SQL server Tutorial Javatpoint') AS Position;
执行该语句将显示以下输出 :

SQL Server CHARINDEX() Function

4. 使用 COLLATE 子句执行区分大小写的搜索

此示例显示使用 COLLATE 子句在搜索字符串 'SQL server Tutorial Javatpoint' 中对字符串 'SERVER' 进行区分大小写的搜索。

SELECT CHARINDEX('SERVER', 
 'SQL server Tutorial Javatpoint' 
  COLLATE Latin1_General_CS_AS
) AS Position;

执行该语句将显示以下输出,因为它在指定的字符串中不包含字符串 “SERVER”。

SQL Server CHARINDEX() Function

5. 搜索不存在的子串

下面的示例在字符串 'Javatpoint is best for learning java' 中搜索子字符串 'JavaScript':

DECLARE @str VARCHAR(50);  
SELECT @str = 'Javatpoint is best for learning java';  
SELECT CHARINDEX('JavaScript', @str) AS Position;

执行该语句将显示以下输出 :

SQL Server CHARINDEX() Function

6. 搜索多个匹配的子串

下面的示例执行搜索指定字符串中具有多个匹配项的子字符串。 这里我们要搜索java并找到它的位置。

DECLARE @str VARCHAR(50);  
SELECT @str = 'It is best to learn java on Javatpoint. Java is best for backend programming';  
SELECT CHARINDEX('Java', @str) AS Position;

执行该语句将返回第一个匹配的子串位置:

SQL Server CHARINDEX() Function

7. CHARINDEX 函数从特定位置开始搜索

在本例中,我们将使用 starting_position 参数在给定字符串的第十个字符处开始搜索子字符串 'for':

SELECT CHARINDEX ('for', 'Love for all, Hate for none', 10) As Position;
执行该语句将显示以下输出 :

SQL Server CHARINDEX() Function

标签:函数,Server,CHARINDEX,搜索,SQL,字符串
From: https://www.cnblogs.com/nuomibaibai/p/17502555.html

相关文章

  • 如何【一句话】取消Blazor Server烦人的重新连接?
    本篇文章是基于: 如何取消BlazorServer烦人的重新连接?的改进版 在_Host.cshtml的<body>里定义一下div1<style>#components-reconnect-modal{display:none;}</style><divid="components-reconnect-modal"></div>  原理,直接在css里将对应重新连接的div的dis......
  • windows server 2019系统-串口设备导致鼠标乱跳的问题
    问题描述:最近在预装有windows7SP1系统的工控机上,开发了一款modbus数据监听、处理的应用程序。主要功能就是监听485线上modbus通信数据,处理数据,并上报到中心平台,485数据通过USB串口转485信号转换模块获取。调试过程中发现,工控机在接入被监听485信号的情况下启动,进入系统之后,采......
  • Java学习之mysql为什么可以实现可重复读
    什么是mvccMysql的隔离级别是‘可重复读’,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改操作并提交,那么事务A再读该数据,依然还是原来的内容。它的实现原理是MVCC(Multi-VersionConcurrencyControl)多版本并发控制,MVCC保证当前查询为快照读,所以不受其他事务影响。什......
  • Linux 安装/卸载 MySQL 8.0
    Linux安装/卸载MySQL8.0原创 默存 全栈客 2023-06-1511:14 发表于甘肃收录于合集#linux1个#mysql1个安装Centos安装MySQL8.0操作系统环境[root@t2 local]# hostnamectlStatic hostname: hadoop-masterIcon name: computer-desktopChassis: de......
  • MySQL - 死锁的产生及解决方案
    MySQL-死锁的产生及解决方案原创 一安 一安未来 2023-06-1508:02 发表于北京收录于合集#干货分享集115个大家好,我是一安~简介死锁指两个或多个事务相互等待对方释放锁,从而导致进程无法继续执行的一种情况。当一个事务需要锁定一些资源时,如果这些资源已经被其他......
  • Could not resolve type alias 'com.github.mybatis.helper.page.PageSqlInterceptor'
    报错信息 Couldnotresolvetypealias'com.github.mybatis.helper.page.PageSqlInterceptor'.Cause:java.lang.ClassNotFoundException:Cannotfindclass:com.github.mybatis.helper.page.PageSqlInterceptor 原因报错的位置是 mybatis-config.xml 文件中......
  • 面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!
    测试环境:MySQL版本:8.0数据库表:T(主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。推荐一个开源免费的SpringBoot实战项目:https://github.com/javastacks/sprin......
  • Mongo与MySql区别
    1.MongoDBmongoDB是一种分布式文档型数据库,具有分布式架构设计。mongoDB分布式架构包含:分片、副本和分布式查询路由1.1分片MongoDB分片技术将数据分割成多个分片(shard),每个分片存储部分数据。分片可以按照数据的范围、has值、分片键等方式进行分配。在分片集群中有一个特定的m......
  • 记一次字符串末尾空白丢失的排查 → MySQL 是会玩的!
    开心一刻今天答应准时回家和老婆一起吃晚饭,但临时有事加了会班,回家晚了点回到家,本以为老婆会很生气,但老婆却立即从厨房端出了热着的饭菜老婆:还没吃饭吧,去洗下,来吃饭吧我洗好,坐下吃饭,内心感动十分;老婆坐旁边深情的看着我老婆:你知道谁最爱你吗我毫不......
  • 02 | 日志系统:一条SQL更新语句是如何执行的?
    以下内容出自《MySQL实战45讲》02|日志系统:一条SQL更新语句是如何执行的?查询语句的那套流程,更新语句也会走一遍。更新流程中和查询不一样的是,更新流程中涉及了两个重要的日志模块。redolog(重做日志)和binglog(归档日志)。redolog-InnoDb特有作用:用来记录对磁......