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)
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;
SELECT CHARINDEX(',','kjdfkj,kjdfkjdf,kdjfkj')
返回值就是整数7。
这代表,逗号在第七个字符的位置。