首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2 -字符串操作

DB2 -字符串操作
EN

Stack Overflow用户
提问于 2021-07-16 08:54:49
回答 1查看 46关注 0票数 0

我们可以检查一个逗号分隔的字符串值是否存在于DB2的另一个逗号分隔的字符串中吗?

我说了两个字符串,如下所示

代码语言:javascript
复制
Case-1:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'

我希望在DB2中有任何函数,在上面的例子中应该返回1,因为字符串-2中的PQR存在于字符串-1中。该值应与逗号内、逗号后或逗号之前的任何字符串匹配。

代码语言:javascript
复制
Case-2:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,P QR'

但对于上面的情况,相同的函数应该返回0。因为"P“后面有空格

我还希望有一个类似的函数,它应该返回连接的字符串,但删除重复的字符串。

代码语言:javascript
复制
Case-1:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'

Output should be 'ABC,XYZ,PQR,MNO' . 

在这种情况下,逗号分隔值的顺序并不重要;但是PQR不应该重复两次。

代码语言:javascript
复制
Case-2:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,P QR'

In this case output should be 'ABC,XYZ,PQR,MNO,P QR' .

我正在尝试使用SQL或DB2中的任何函数来实现这一点。

在另一种情况下,我希望删除字符串的匹配部分

代码语言:javascript
复制
Case-3:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'

Output should be 'ABC,XYZ,MNO'

显然,String-1和String-2可以有任意多个用逗号分隔的值。

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 04:06:21

试试这个:

代码语言:javascript
复制
CREATE FUNCTION SPLITTER (P_STR VARCHAR(4000), P_DELIM VARCHAR(10))
RETURNS TABLE (SEQ INT, TOKEN VARCHAR(50))
RETURN
SELECT TOK.SEQ, TOK.TOKEN
FROM XMLTABLE
(
  'for $id in tokenize($s, $t) return <i>{string($id)}</i>' PASSING P_STR AS "s", P_DELIM AS "t"
  COLUMNS
    SEQ   FOR ORDINALITY
  , TOKEN VARCHAR(50) PATH '.'
) TOK;

SELECT 
CASE 
  WHEN EXISTS 
  (
  SELECT 1 
  FROM TABLE (SPLITTER ('ABC,XYZ,PQR', ',')) A
  JOIN TABLE (SPLITTER ('MNO,PQR', ',')) B ON B.TOKEN = A.TOKEN
  )
  THEN 1
  ELSE 0
END
FROM SYSIBM.SYSDUMMY1;

SELECT LISTAGG (TOKEN, ',')
FROM
(
SELECT TOKEN
FROM TABLE (SPLITTER ('ABC,XYZ,PQR', ','))
  UNION
SELECT TOKEN
FROM TABLE (SPLITTER ('MNO,PQR', ','))
);

SELECT LISTAGG (TOKEN, ',')
FROM
(
  SELECT DISTINCT COALESCE (A.TOKEN, B.TOKEN) AS TOKEN
  FROM TABLE (SPLITTER ('ABC,XYZ,PQR', ',')) A
  FULL JOIN TABLE (SPLITTER ('MNO,PQR', ',')) B ON B.TOKEN = A.TOKEN
  WHERE A.TOKEN IS NULL OR B.TOKEN IS NULL
);

dbfiddle链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68402292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档