高手,在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语句,不用函数。

参考技术A select student from xxhd a, school b where patindex('%' || a.school || '%',b.school)>0追问

大侠,显示有语法错误,是哪里问题!

追答

忘记问你了,你这是什么数据库,|| 是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语句里如何提取出分隔符前后的字符???不要太长的。的主要内容,如果未能解决你的问题,请参考以下文章

SQL中逗号分隔的查询结果转换成单个字符串放到in语句里

sql中如何判断字符串中含有特殊字符

在sql语言中,如何提取出数组中的一段数据。

sql语句 分次(多次)获取不重复记录,请高手赐教!

excel表格里前后空字符串是怎么造成的

如何用SQL语句,在数字加中文的混合数据中提取出中文