高手,在sql语句里如何提取出分隔符前后的字符???不要太长的。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高手,在sql语句里如何提取出分隔符前后的字符???不要太长的。相关的知识,希望对你有一定的参考价值。
如:字符串:ajhdjsahj,asdhajshd,kafkas(,为分隔符) 我要提取某个分隔符后的字符串,如asdhajshd 但我不知道截取的字符串长度。
参考技术A 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) 参考技术B 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; 参考技术C SELECT CHARINDEX(',','kjdfkj,kjdfkjdf,kdjfkj')
返回值就是整数7。
这代表,逗号在第七个字符的位置。
SQL中逗号分隔的查询结果转换成单个字符串放到in语句里
查询的结果转换成单个字符串放到in语句里
现查询语句:select student from xxhd where school in (select school from school)
主要问题是select school from school查询出来的结果是第一中学,第二中学,第三中学...都在一行里,需要把第一中学,第二中学,第三中学转换为'第一中学','第二中学','第三中学',以便实现
select student from xxhd where school in ('第一中学','第二中学','第三中学')这样的查询结果,当然,不能写成固定值,只能把select school from school查询后的结果进行转换
谢谢大家!最好用SQL语句,不用函数。
大侠,显示有语法错误,是哪里问题!
忘记问你了,你这是什么数据库,|| 是oracle字符串链接的符号。。。
sql server是+
谢谢,语句可以执行了,就是查询不到数据
要不用CHARINDEX()
select student from xxhd a, school b where CHARINDEX(a.school,b.school)>0
第二条语句,也没有返回结果,空的
本回答被提问者采纳 参考技术B select student from xxhd where CHARINDEX(school,(select school from school))>0以上是关于高手,在sql语句里如何提取出分隔符前后的字符???不要太长的。的主要内容,如果未能解决你的问题,请参考以下文章