Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >sqlserver 查找某个字符在字符串中第N次出现的位置

sqlserver 查找某个字符在字符串中第N次出现的位置

作者头像
跟着阿笨一起玩NET
发布于 2018-09-18 10:04:50
发布于 2018-09-18 10:04:50
6.8K00
代码可运行
举报
运行总次数:0
代码可运行

例如: 查找'A,' 在'A,B,C,D,A,B,C,D,C,D,B,A,C,E,'中第二次出现的位置 怎么实现,SQL 中有这样的函数吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL code
/*
方法很多,这里简单写一个
返回@find在@str中第(@n)次出现的位置。没有第(@n)次返回0。
*/
create function fn_find(@find varchar(8000), @str varchar(8000), @n smallint)
    returns int
as
begin
    if @n < 1 return (0)
    declare @start smallint, @count smallint, @index smallint, @len smallint
    set @index = charindex(@find, @str)
    if @index = 0 return (0)
    else select @count = 1, @len = len(@find)
    while @index > 0 and @count < @n
        begin
            set @start = @index + @len
            select @index = charindex(@find, @str, @start), @count = @count + 1
        end
    if @count < @n set @index = 0
    return (@index)
end
go
declare @str varchar(100)
set @str='A,B,C,D,A,B,C,D,C,D,B,A,C,E'
select dbo.fn_find('A',@str,1) as one, dbo.fn_find('A',@str,2) as two, dbo.fn_find('A',@str,3) as three, dbo.fn_find('A',@str,4) as four
/*
one         two         three       four        
----------- ----------- ----------- ----------- 
1           9           23          0
*/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实现SQL Server中的切割字符串SplitString函数,返回Table
有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了。
写代码的猿
2019/04/11
3.2K0
实现SQL Server中的切割字符串SplitString函数,返回Table
SQL Server中自定义函数:用指定的分隔符号分割字符串
其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用。
张传宁IT讲堂
2019/09/17
4.4K0
SQL Server中自定义函数:用指定的分隔符号分割字符串
判断字符串中只包含或不包含某种字符的方法
通过2个函数:CHARINDEX和PATINDEX CHARINDEX:查某字符(串)是否包含在其他字符串中,返回字符串中指定表达式的起始位置。 PATINDEX:查某字符(串)是否包含在其他字符串中,返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。特殊:可以使用通配符!
jack.yang
2025/04/05
670
[翻译]如何从 SQL Server 恢复已删除的数据
在我使用 SQL Server 的这些年里,最常见的问题之一一直是“我们如何恢复已删除的记录?”
保持热爱奔赴山海
2024/05/10
3370
【SQL】查找给定字符串中包含已知子字符串
CREATE Function [dbo].[ConvertSyntax](@paraStr nvarchar(2000))
鲁郭大侠
2020/03/05
2.3K0
行数据列数据互换SQL例子
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[weatherreport]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[weatherreport] GO
jack.yang
2025/04/05
400
Sql实现Split
create function [dbo].[Get_StrArrayLength] ( @str varchar(max), –要分割的字符串 @split varchar(10) –分隔符号 ) returns int as begin declare @location int declare @start int declare @length int –去掉前后空格 set @str=ltrim(rtrim(@str)) –分隔符第一次出现的位置 set @location=charindex(@split,@str) –设置分隔后的字符串长度为1 set @length=1
全栈程序员站长
2022/07/04
4430
如何根据日志查看删除的数据(转译)
原文地址:https://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/   在我的SQLServer的工作中,最经常被问到的一个问题就是“能恢复删除的数据吗?”   我的回答是肯定的,注意下面的数据类型是可以通过脚本直接恢复的,当然数据库的版本要在SQLServer2005 以上才行。 经过讨论发现2008和2012以及2014的express版本也不能实现脚本直接恢复。 image text uniqueidentif
用户1217611
2018/01/30
7.4K0
数据库:分享四个实用的SQLServer脚本函数,欢迎收藏
功能:主要适用于数据库字段存储字段用逗号等分隔符存储,可以转换为list然后用子查询使用。
小明互联网技术分享社区
2021/02/26
5150
【SQL】sql版Split函数。用于拆分字符串为单列表格
功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行。可选是否移除空格子串和重复项。市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想法。
AhDung
2018/09/13
1.8K0
SQL常用数据库结构升级语句
修改视图 --SQL Server 2005 GO IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[e_myWorkflowProcessModule]')) DROP VIEW [dbo].[e_myWorkflowProcessModule] GO CREATE VIEW [dbo].[e_myWorkflowProcessModule] AS -------- GO 修改存储过程 --S
欢醉
2018/01/22
9040
[SQL]实现按照指定分割分分割字符串
SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE  function [dbo].[fun_split](@SourceSql varchar(max),@StrSeprate varchar(10))   returns @temp table(SplitValue NVARCHAR(max))   --功能: 实现split的函数   --用法:select * from dbo.fun_split('ABC:BC:C:D:E::',':')   
跟着阿笨一起玩NET
2018/09/18
3.4K0
Sql Server 集合防黑办法
Sql Server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件查询一个集合基本上多数据查询的必备项目.
谭广健
2019/04/03
1.1K0
Sql Server 集合防黑办法
MSSQL之二十一 存储过程案例
用户9184480
2024/12/17
920
Sql2000存储过程分页
ALTER PROCEDURE [dbo].[procPageChangeForSql2000] ( @fromSql varchar(3000), @querySql varchar(2000), @whereSql varchar(1300), @orderBySql varchar(200), @keyField varchar(100), @PageSize int, --每页多少条记录 @PageIndex int,
跟着阿笨一起玩NET
2021/09/26
8410
解密encrypt的存储过程
--破解函数,过程,触发器,视图.仅限于SQLSERVER2000 IF EXISTS (select 1 from dbo.sysobjects where id = object_id(N'[dbo].[SP_DECRYPT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SP_DECRYPT] GO CREATE PROCEDURE sp_decrypt(@objectname varchar(50)) AS begin set nocount on --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 --修正上一版视图触发器不能正确解密错误 begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000) DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@objectname) create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int) insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectname) select @number=max(number) from #temp set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin if @type='P' set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectname +';'+rtrim(@k)+' WITH ENCRYPTION AS ' else 'ALTER PROCEDURE '+ @objectname+' WITH ENCRYPTION AS ' end) if @type='TR' begin declare @parent_obj varchar(255),@tr_parent_xtype varchar(10) select @parent_obj=parent_obj from sysobjects where id=object_id(@objectname) select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj if @tr_parent_xtype='V' begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 ' end else begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='FN' or @type='TF' or @type='IF' set @sql1=(case
jack.yang
2025/04/05
220
祺佑三层开发框架(猫框)2023.11.16发新
加菲猫的VFP
2023/11/16
2160
祺佑三层开发框架(猫框)2023.11.16发新
SQLServer中使用SUBSTRING截取字符串[通俗易懂]
SUBSTRING 返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft&reg; SQL Server&#8482; 数据类型的更多信息,请参见数据类型。
全栈程序员站长
2022/08/31
11.2K0
2-3 T-SQL函数
在Transact-SQL语言中,函数被用来执行一些特殊的运算以支持SQL Server的标准命令。SQL Server包含多种不同的函数用以完成各种工作,每一个函数都有一个名称,在名称之后有一对小括号,如:gettime( )表示获取系统当前的时间。大部分的函数在小括号中需要一个或者多个参数。Transact-SQL 编程语言提供了四种函数:行集函数、聚合函数、Ranking函数、标量函数。
py3study
2020/01/08
1.5K0
SQLSERVER存储过程语法详解
@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
全栈程序员站长
2022/09/13
1.7K0
相关推荐
实现SQL Server中的切割字符串SplitString函数,返回Table
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验