问题
张三需要给商品打标签,遇到几个问题。
-
每个商品在原来的数据库中已有一部分标签,并且标签都已经汇总成一个字段,需要将新的标签添加到原有的标签。
-
此外,还有一张表,需要每天更新标签,在更新数据库的时候,需要将旧标签剔除,保证这个标签都是新增的。
问题分析
新旧标签都是字符串,解决上述问题本质上是现在要对新旧标签进行集合运算,问题 1 使用并集,问题 2 使用差集。
解决方法
现在新旧标签都是字符串无法直接进行集合运算,需要进行一个转化,首先对标签进行拆分,进行一行转多行的操作,之前在Python中介绍过,这里我们使用数据库中的操作
SELECT DISTINCT
REGEXP_SUBSTR('a;b;c', '[^;]', 1, LEVEL ) TAG
FROM
DUAL CONNECT BY LEVEL <= REGEXP_COUNT ( 'a;b;c', '[^;]' )
结果如下:
TAG |
---|
a |
b |
c |
可以看到标签已经被拆分成多个了,只需要将新旧标签都拆分成这样的表格,再通过JOIN进行集合运算,得到想要的结果
这里就不展开来说了,比较繁琐,如果这个需求经常用的话,感觉很麻烦,这里我想用一个自定义一个函数解决上述问题,使用起来就方便多了。
字符串集合运算
CREATE OR REPLACE FUNCTION GET_UNIQN_STRING (ori_string IN VARCHAR2, new_string IN VARCHAR2, delimiter IN VARCHAR2