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

前几天的考试系统出现了一个问题,背景大概就是告诉你正确答案,比如说是:答案1#答案2#答案3...而几百个学生答题的记录也是这样格式存储的,问如何用sql语句为每个学生判分?

思路:

第一步:找到第N个#在字符串中的位置

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

第二步:

截取学生第N道题的答案和正确答案第N道题做比较,把做对的人的分数加1。

update dbo.T_dxyysyj_BankedCloze2_Record

set Fraction =Fraction +1

where QuestionID =‘3‘ and SUBSTRING(ExamAnswer,dbo.fn_find(@find,@str,@mystart)+1,@mylength)=SUBSTRING(@str,dbo.fn_find(@find,@str,@mystart)+1,@mylength)

第三步:

封装成存储过程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-29 06:42:09

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

C语言strchr()函数:查找某字符在字符串中首次出现的位置

头文件:#include <string.h> strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:    char * strchr (const char *str, int c); [参数]str 为要查找的字符串,c 为要查找的字符. strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回. 注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个字符也可以被定位. [返回值]如果找到指定的字符则返回该字

JavaSE8基础 String lastIndexOf 反向查找 返回字符在字符串中第一次出现时的索引值

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t00; public class Dome3 { public static void main(String[] args) { // 索引值 // 10 // 11 // 12 // 13 // 0123456789 String str = "abc01234543

JavaSE8基础 String indexOf 正向查找 返回字符在字符串中第一次出现时的索引值

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t00; public class Dome3 { public static void main(String[] args) { String str = "abc01234543210cba"; char ch = '0'; System.out.print

js如何计算一个字符在字符串中出现的次数

js如何计算一个字符在字符串中出现的次数:在实际应用中可能要计算一个字符在字符串中出现的次数,实现此功能的方式有多种,下面就介绍一个非常简单的方式.代码实例如下: function func(str,char) { var str=str; var num=(str.split(char)).length-1; return num } document.write(func("abcdefga","a")); 以上代码可以实现计算一个字符串中指定字符出现的次数.相

mysql 统计一个字符在字符串中出现的次数

CREATE  FUNCTION `str_pcount`(str varchar(255),p varchar(255)) RETURNS int(11)BEGIN    #统计一个字符在字符串中出现的次数      RETURN LENGTH(str) - LENGTH(REPLACE(str,p,''));END; 原文地址:https://www.cnblogs.com/snake23/p/9838241.html

C#统计一个字符在字符串中出现的次数

//第一种方法,IndexOf和LastIndexOf查找后Substring截取 string s = "aaabbbcccXXXYYY"; int index = s.IndexOf("X");//第一次X出现的位置 int last = s.LastIndexOf('X');//最后一次X出现的位置 int num = s.Substring(index,last+1-index).Length;//截取出现的位置求长度 Console.WriteLine(n

【SQLSERVER】如何找出字符串中的数字

可以通过写自定义函数实现,以下提供两种思路来解决: 1.通过正则匹配,找到字符串中的数字,一个一个拼起来 /*方法一: 一个一个找出来*/ CREATE FUNCTION [dbo].[Fun_GetNumPart] ( @Str NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @Start INT; DECLARE @End INT; DECLARE @Part NVARCHAR(MAX) SET @Start = PATINDEX

sql server中的charindex函数用法解析(在一段字符中搜索字符或者字符串-----返回expression1在expression2出现的位置;反之,返回0)

https://blog.csdn.net/xinghuo0007/article/details/70651358 知识点一:charindex()语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 解析: expression1 必需 ---要查找的子字符串 expression2 必需 ---父字符串 start_location 可选 ---指定从父字符串开始查找的位置,默认位置从1开始 知识点二: charin

JavaSE8基础 String indexOf 正向 从指定索引值开始查找 字符在字符串中第一次出现的位置

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t00; public class Demo4 { public static void main(String[] args) { // 索引值 0123 String str = "abc01234543210cba"; char ch = '0'; Syst