DECLARE @str VARCHAR(150)
declare @result table(indexOfArisk int)
declare @strResult int
set @strResult = 0
SET @str='1001200223003334004444500555556677'
while (charindex( '', @str) != 0)
begin
set @strResult = @strResult + charindex( '', @str)
insert into @result values(@strResult)
set @str = Substring(@str, charindex('', @str) + 1, len(@str))
end
select from @result
这个查询能得到所有的位置,根据你的需要获取吧。
Wish it helps
instr( string1, string2 [, start_position [, nth_appearance ] ] )
string1源字符串,要在此字符串中查找。
string2要在string1中查找的字符串
start_position 代表string1 的哪个位置开始查找。默认为1 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance 代表要查找第几次出现的string2 此参数可选,如果省略,默认为 1如果为负数系统会报错。
length 函数
substr函数配合就可以你想要的功能了
我要说一句,连PL/SQL都不知道的也能给推荐?
请推荐的人不要只为了完成任务而推荐,为网友,为知道负点责好吗?
如果是C#,直接split+length就可以得到结果,人家要的是PL/SQL
PL/SQL是Oracle数据库对SQL语句的扩展, Oracle中有Instr函数,可以找到某个字符串在某个表达式中的位置,但是只是第一次出现的位置,如果想找出所有的位置,只能写个函数了。
下面是我写的函数:
CREATE OR REPLACE FUNCTION GetCharNumbers (pStr IN VARCHAR2, pSplit IN VARCHAR2) RETURN VARCHAR2 IS
vTempStr VARCHAR2(200);
vReturnStr VARCHAR2(200);
vPost NUMBER;
vTotal NUMBER;
BEGIN
vPost := 0;
vTotal := 0;
vTempStr := pStr;
vReturnStr := null;
WHILE INSTR(vTempStr, pSplit) > 0 LOOP
vPost := INSTR(vTempStr, pSplit);
vTotal := vTotal + vPost;
IF vReturnStr IS NOT NULL THEN
vReturnStr := vReturnStr || ', ';
END IF;
vReturnStr := vReturnStr || TO_CHAR(vTotal);
vTempStr := SUBSTR(vTempStr,vPost+1);
END LOOP;
RETURN vReturnStr;
END;
用法 select GetCharNumbers('ljdkj1231,123,flskdf,dfjalskdfja,12e',',') from dual
反回结果:
10, 14, 21, 33
常用的字符串函数,其作用可分为四大类:串接字符、截取字符、转换字符、其他作用的字符函数。
串接,就是把单独的字符串组合为一个。如把人的姓和名串接在一起形成一个完整的姓名字符串。
截取,是指从字符串里提取出一部分字符,形成子串。可以分为截取字符、提取字符的位置。
转换,是指把一个字符串中的内容或形式变换成另一个内容或形式。分为内容转换和形式转换。
其他作用的字符函数:以上三种作用之外的其他字符函数。
下面详细介绍。
串接函数
可以通过+或者-,实现串接 *** 作。在不同的数据库管理系统中,使用的串接符号不同。
在SQL SERVER中的代码为:SELECT ‘JOHN’+ ‘SON’
在MySQL中的代码为:SELECT CONCAT(‘JHON’,‘SON’)
截取函数
1、SUBSTR(COLUMN NAME,STARING POSITION,LENGTH)
COLUMN NAME:字段名称
STARING POSITION:起始位置,即从第几个字符开始截取
LENGTH:长度,即截取多少个字符的长度
select emp_id,substr(emp_id,1,3) from employee
从雇员表中检索出雇员编号,雇员姓名两个字段。其中雇员姓名可通过从编号ID的前三个字符截取得到。
2、TRIM()、LTRIM()、RTRIM(),剪除字符串中的字符。
SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。这个函数在不同的资料库中有不同的名称:
MySQL: TRIM( ), RTRIM( ), LTRIM( )
Oracle: RTRIM( ), LTRIM( )
SQL Server: RTRIM( ), LTRIM( )
各种 trim 函数的语法如下:
TRIM ( [ [位置] [要移除的字串] FROM ] 字串): [位置] 的可能值为 LEADING (起头), TRAILING (结尾), or BOTH (起头及结尾)。 这个函数将把 [要移除的字串] 从字串的起头、结尾,或是起头及结尾移除。如果我们没有列出 [要移除的字串] 是什么的话,那空白就会被移除。
LTRIM(字串): 将所有字串起头的空白移除。
RTRIM(字串): 将所有字串结尾的空白移除
以上就是关于SQL 特殊字符位置全部的内容,包括:SQL 特殊字符位置、SQL 如何获取字符串最后一位是"。"号的位置、PL/SQL取字符串子串位置的算法。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)