匹配字符串中的精确数字并替换 oracle

match exact digits within string and replace oracle

我需要匹配一组精确的数字,然后用另一列中的“1”替换,我可以使用如下所示的 CASE 语句来做到这一点

SELECT
  CASE PT_6 WHEN '75' THEN '1' ELSE '' END AS PT_6_1
FROM edrn.pca_patient
WHERE irid = 4395;

However the PT_6 column is populated from checkboxes on the application so when multiple checkboxes are selected the data is 86,75,81.

我需要一种方法来提取我从字符串中输入的值,并将其替换为不同列中的 1,例如PT_6_1。我玩过一些 REGEXP,但不确定我能否在 CASE 中做到这一点。

在其他需要这个的列中 - 它们不都是 2 位数字,有些是 3 位所以我想如果我使用某种形式的 LIKE,我可能会错误地从 175 个中选出 75 个

一些示例数据和更多信息,对于此示例,PT_6 有 6 个可能的复选框。我需要单独列中的每个复选框作为 1 或 0 来表示是否打勾,因此列为 PT_6_1、PT_6_2 等等。

4条记录的当前数据

IRID    PT_6
4395    85,75,87
3183    85,87
3219    85
2180    86

所以说我想将 87 表示到列 PT_6_3 中,如果没有匹配项则为 NULL,那么数据将是

IRID    PT_6_1  PT_6_2  PT_6_3  PT_6_4  PT_6_5  PT_6_6
4395    null    null    1       null    null    null
3183    null    null    1       null    null    null
3219    null    null    null    null    null    null
2180    null    null    null    null    null    null

谢谢, 艾伦

原版问题的回答:

SELECT TRIM( BOTH ',' FROM REPLACE( ','||PT_6||',', ',75,', ',1,' ) ) AS PT_6_1
FROM   edrn.pca_patient
WHERE  irid = 4395;

回答问题的更新版本:

SELECT irid,
       CASE WHEN ','||PT_6||',' LIKE '%,75,%' THEN 1 END AS PT_6_contains_75,
       CASE WHEN ','||PT_6||',' LIKE '%,85,%' THEN 1 END AS PT_6_contains_85,
       CASE WHEN ','||PT_6||',' LIKE '%,87,%' THEN 1 END AS PT_6_contains_87
FROM   edrn.pca_patient