Oracle 字段是多个值的字符串的查询处理

1、创建两张表一张用户表(T_User),一张兴趣小组表T_Group,其中小组成员字段存储用户ID列表以逗号隔开,

  表:T_User

  编号(F_ID)   名称(用户名)
  1         张三
  2         李四
  3         王五

  表:T_Group

  编号(F_ID)   名称(兴趣小组名字)//group_name    兴趣小组成员ID/member_list
  1         奥数                  1,2
  2         动物世界                2
  3         艺术                  1,2,3

 要求查询结果:

  编号(F_ID)   名称(兴趣小组名字)  兴趣小组成员ID
  1         奥数          张三,李四
  2         动物世界        李四
  3         艺术          张三,李四

  SQL语句:

 

select f_id,group_name,

(select wm_sys.wm_concat(to_char(f_name)) from t_user where insert(member_list,f_id)>0 ) as memberList_name

from t_gourp

 

这中间用到了两个函数

wm_sys.wm_concat 将多行单列字段拼成已逗号隔开的字符串

insert(string,substring) 返回substring 在字符string 的索引,这个函数很奇怪吧,不用管那么多直接当indexof 用就行了

上面建表严重违反三大范式,但是实际开发中确实存在这样的情况,希望朋友们勿喷

 

转载于:https://www.cnblogs.com/Dylanblogs/p/4178268.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Oracle中,如果要按照逗号(,)来分割一个字段,可以使用SUBSTR和INSTR函数的组合来实现。 首先,可以使用INSTR函数来查找逗号在字段中的位置。该函数会返回逗号在字符串中的位置索引。 例如,假设有一个字段value,为"1,2,3,4"。可以使用以下语句来找到第一个逗号的位置: ``` SELECT INSTR(value, ',') AS comma_index FROM table_name; ``` 接下来,可以使用SUBSTR函数来提取字段中逗号之前或之后的内容。该函数接受三个参数,分别是要提取的字符串、开始位置和要提取的长度。 例如,可以使用以下语句来提取逗号之前的内容: ``` SELECT SUBSTR(value, 1, INSTR(value, ',')-1) AS before_comma FROM table_name; ``` 类似地,可以使用以下语句来提取逗号之后的内容: ``` SELECT SUBSTR(value, INSTR(value, ',')+1) AS after_comma FROM table_name; ``` 如果有多个逗号,可以使用一个递归的方法来反复获取每一个逗号分割的内容。 通过以上的方法,可以在Oracle中按照逗号分割一个字段。 ### 回答2: 在Oracle中,可以使用SUBSTR和INSTR函数来按照逗号分割一个字段。 SUBSTR函数用于返回一个字符串的子串,它接受三个参数:字符串、起始位置和长度。而INSTR函数用于查找一个字符串在另一个字符串中的位置,它也接受三个参数:字符串、要查找的字符串和起始位置。 首先,我们可以使用INSTR函数查找字段中第一个逗号的位置。例如,假设我们有一个字段my_field包含以下内容:"A,B,C,D",我们可以使用以下语句查找第一个逗号的位置: ``` SELECT INSTR(my_field, ',') FROM my_table; ``` 接下来,我们可以使用SUBSTR函数获取从字段开头到第一个逗号之前的子串。例如,我们可以使用以下语句获取从开始到第一个逗号之前的内容: ``` SELECT SUBSTR(my_field, 1, INSTR(my_field, ',')-1) FROM my_table; ``` 同样,我们可以继续使用INSTR和SUBSTR函数来获取字段中其他逗号之间的内容。例如,我们可以使用以下语句获取从第一个逗号到第二个逗号之间的内容: ``` SELECT SUBSTR(my_field, INSTR(my_field, ',')+1, INSTR(my_field, ',', 1, 2)-INSTR(my_field, ',')-1) FROM my_table; ``` 以此类推,我们可以使用类似的方法获取字段中其他逗号之间的内容。 需要注意的是,以上方法假设字段中只有逗号分割的内容,并且只有一个逗号分隔。如果字段中有多个逗号分隔的内容,那么可以使用循环或递归来处理每个逗号之间的内容。 ### 回答3: 在Oracle中,如果有一个字段需要按照逗号进行分割,可以使用SUBSTR和INSTR函数来实现。 首先,使用INSTR函数来查找字符串中逗号的位置。这个函数的参数包括需要查找的字符串和要搜索的字符。使用逗号作为搜索字符,返回的是逗号在字符串中的位置。 然后,使用SUBSTR函数来截取字符串。这个函数的参数包括需要截取的字符串、起始位置和长度。起始位置可以使用INSTR函数返回的逗号位置来确定,长度可以根据需要进行调整。 接着,可以使用SELECT语句来查询需要分割的字段。在SELECT语句中,通过使用SUBSTR函数来截取字段,从而实现分割。例如,可以使用以下语句来查询字段分割后的结果: SELECT SUBSTR(field, 1, INSTR(field, ',')-1) AS part1, SUBSTR(field, INSTR(field, ',')+1) AS part2 FROM table; 其中,field表示需要分割的字段,table表示包含该字段的表名。在查询结果中,part1和part2分别表示以逗号为分割点,分割后的两个部分。 总体而言,通过结合使用SUBSTR和INSTR函数,可以在Oracle中实现字段按照逗号进行分割的操作。以上仅是一个简单的示例,根据实际需求,还可以进一步扩展和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值