高手,在sql语句里如何提取出分隔符前后的字符???不要太长的。 5
如:字符串:ajhdjsahj,asdhajshd,kafkas(,为分隔符)我要提取某个分隔符后的字符串,如asdhajshd但我不知道截取的字符串长度。...
如:字符串:ajhdjsahj,asdhajshd,kafkas(,为分隔符) 我要提取某个分隔符后的字符串,如asdhajshd 但我不知道截取的字符串长度。
展开
3个回答
展开全部
create FUNCTION f_STR(
@s varchar(100), --待分拆的字符串
@split varchar(1), --分隔符
@count int--第几个
)RETURNS varchar(20)
AS
BEGIN
declare @curr int,@re varchar(20)
set @s=@s+@split
set @curr=0
while @curr<>@count
begin
set @s=SUBSTRING(@s,(CHARINDEX(@split,@s)+1),(len(@s) -(CHARINDEX(@split,@s))))
set @curr=@curr+1
end
set @re=SUBSTRING(@s,1,(CHARINDEX(@split,@s) -1))
return @re
END
select dbo.f_STR('123,yu,33',',',0)
select dbo.f_STR('123,yu,33',',',1)
select dbo.f_STR('123,yu,33',',',2)
@s varchar(100), --待分拆的字符串
@split varchar(1), --分隔符
@count int--第几个
)RETURNS varchar(20)
AS
BEGIN
declare @curr int,@re varchar(20)
set @s=@s+@split
set @curr=0
while @curr<>@count
begin
set @s=SUBSTRING(@s,(CHARINDEX(@split,@s)+1),(len(@s) -(CHARINDEX(@split,@s))))
set @curr=@curr+1
end
set @re=SUBSTRING(@s,1,(CHARINDEX(@split,@s) -1))
return @re
END
select dbo.f_STR('123,yu,33',',',0)
select dbo.f_STR('123,yu,33',',',1)
select dbo.f_STR('123,yu,33',',',2)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
oracle写个函数Split_Str_Get_One( 'aaa,bbb,ccc', ',', 1)
第一个参数是你的字符串,第二个参数是分隔符,第三个参数是你要取第几个子字符串,函数定义如下:
CREATE OR REPLACE FUNCTION Fun_Split_Str_Get_One
(
p_str VARCHAR2, --原始字符串
p_delim VARCHAR2, --分割字符串
p_offset NUMBER --子字符串偏移量
) RETURN VARCHAR2 AS
v_result VARCHAR2(128);
BEGIN
/*SELECT column_value
INTO v_result
FROM (SELECT rownum rn, column_value
FROM TABLE(CAST(Fun_Split_Str_To_Table(p_str, p_delim) AS t_vc)))
WHERE rn = p_offset and rownum=1;*/
IF p_offset <= 0 THEN
RETURN '';
END IF;
IF p_offset = 1 THEN
SELECT substr(p_str, 1,
decode(instr(p_str, p_delim, 1, 1), 0, length(p_str),
instr(p_str, p_delim, 1, 1) - 1))
INTO v_result
FROM dual;
ELSE
IF instr(p_str, p_delim, 1, p_offset - 1) = 0 THEN
v_result := '';
ELSE
SELECT substr(p_str, instr(p_str, p_delim, 1, p_offset - 1) + 1,
decode(instr(p_str, p_delim, 1, p_offset), 0, length(p_str),
instr(p_str, p_delim, 1, p_offset) - 1) -
instr(p_str, p_delim, 1, p_offset - 1))
INTO v_result
FROM dual;
END IF;
END IF;
RETURN v_result;
EXCEPTION
WHEN no_data_found THEN
v_result := '';
RETURN v_result;
END;
第一个参数是你的字符串,第二个参数是分隔符,第三个参数是你要取第几个子字符串,函数定义如下:
CREATE OR REPLACE FUNCTION Fun_Split_Str_Get_One
(
p_str VARCHAR2, --原始字符串
p_delim VARCHAR2, --分割字符串
p_offset NUMBER --子字符串偏移量
) RETURN VARCHAR2 AS
v_result VARCHAR2(128);
BEGIN
/*SELECT column_value
INTO v_result
FROM (SELECT rownum rn, column_value
FROM TABLE(CAST(Fun_Split_Str_To_Table(p_str, p_delim) AS t_vc)))
WHERE rn = p_offset and rownum=1;*/
IF p_offset <= 0 THEN
RETURN '';
END IF;
IF p_offset = 1 THEN
SELECT substr(p_str, 1,
decode(instr(p_str, p_delim, 1, 1), 0, length(p_str),
instr(p_str, p_delim, 1, 1) - 1))
INTO v_result
FROM dual;
ELSE
IF instr(p_str, p_delim, 1, p_offset - 1) = 0 THEN
v_result := '';
ELSE
SELECT substr(p_str, instr(p_str, p_delim, 1, p_offset - 1) + 1,
decode(instr(p_str, p_delim, 1, p_offset), 0, length(p_str),
instr(p_str, p_delim, 1, p_offset) - 1) -
instr(p_str, p_delim, 1, p_offset - 1))
INTO v_result
FROM dual;
END IF;
END IF;
RETURN v_result;
EXCEPTION
WHEN no_data_found THEN
v_result := '';
RETURN v_result;
END;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT CHARINDEX(',','kjdfkj,kjdfkjdf,kdjfkj')
返回值就是整数7。
这代表,逗号在第七个字符的位置。
返回值就是整数7。
这代表,逗号在第七个字符的位置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询