我们可以检查一个逗号分隔的字符串值是否存在于DB2的另一个逗号分隔的字符串中吗?
我说了两个字符串,如下所示
Case-1:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'我希望在DB2中有任何函数,在上面的例子中应该返回1,因为字符串-2中的PQR存在于字符串-1中。该值应与逗号内、逗号后或逗号之前的任何字符串匹配。
Case-2:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,P QR'但对于上面的情况,相同的函数应该返回0。因为"P“后面有空格
我还希望有一个类似的函数,它应该返回连接的字符串,但删除重复的字符串。
Case-1:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'
Output should be 'ABC,XYZ,PQR,MNO' . 在这种情况下,逗号分隔值的顺序并不重要;但是PQR不应该重复两次。
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中的任何函数来实现这一点。
在另一种情况下,我希望删除字符串的匹配部分
Case-3:
String-1:'ABC,XYZ,PQR'
Srting-2:'MNO,PQR'
Output should be 'ABC,XYZ,MNO'显然,String-1和String-2可以有任意多个用逗号分隔的值。
发布于 2021-07-17 04:06:21
试试这个:
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链接。
https://stackoverflow.com/questions/68402292
复制相似问题