我有两个字符串,第一个字符串如下所示:24,36,78,98 第二个是这样的:25,36,88,98
现在我想做的是比较sql中的两个字符串,只返回每个字符串中相同的数字。
这在 sql 中可能吗?还是我必须用 PL/SQL 之类的语言编写自己的函数?
我用谷歌搜索但找不到这个问题的任何答案。
可以在 SQL 中比较两个字符串并返回每个字符串中相同的数字。您可以使用 SQL 中提供的字符串操作函数来实现此目的。
SELECT value AS common_number
FROM STRING_SPLIT('24,36,78,98', ',')
INTERSECT
SELECT value
FROM STRING_SPLIT('25,36,88,98', ',');
如果您的数据库系统不支持 STRING_SPLIT 或 INTERSECT,您可以使用 INNER JOIN 获得相同的结果,否则您将必须实现自定义解决方案来拆分字符串并比较值。
定制解决方案-
WITH RECURSIVE SplitValues AS (
SELECT
SUBSTR(string1, 1, CASE INSTR(string1, ',') WHEN 0 THEN LENGTH(string1) ELSE INSTR(string1, ',') - 1 END) AS value,
SUBSTR(string1, CASE INSTR(string1, ',') WHEN 0 THEN LENGTH(string1) + 1 ELSE INSTR(string1, ',') + 1 END) AS remaining,
SUBSTR(string2, 1, CASE INSTR(string2, ',') WHEN 0 THEN LENGTH(string2) ELSE INSTR(string2, ',') - 1 END) AS value2,
SUBSTR(string2, CASE INSTR(string2, ',') WHEN 0 THEN LENGTH(string2) + 1 ELSE INSTR(string2, ',') + 1 END) AS remaining2
FROM (
SELECT '24,36,78,98' AS string1, '25,36,88,98' AS string2
)
UNION ALL
SELECT
SUBSTR(remaining, 1, CASE INSTR(remaining, ',') WHEN 0 THEN LENGTH(remaining) ELSE INSTR(remaining, ',') - 1 END),
SUBSTR(remaining, CASE INSTR(remaining, ',') WHEN 0 THEN LENGTH(remaining) + 1 ELSE INSTR(remaining, ',') + 1 END),
SUBSTR(remaining2, 1, CASE INSTR(remaining2, ',') WHEN 0 THEN LENGTH(remaining2) ELSE INSTR(remaining2, ',') - 1 END),
SUBSTR(remaining2, CASE INSTR(remaining2, ',') WHEN 0 THEN LENGTH(remaining2) + 1 ELSE INSTR(remaining2, ',') + 1 END)
FROM SplitValues
WHERE remaining <> '' OR remaining2 <> ''
)
SELECT DISTINCT value AS common_number
FROM SplitValues
WHERE value IN (SELECT value2 FROM SplitValues);