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

时间:2016-12-13 14:41:13

标签: regex oracle case case-when

我需要匹配一组精确的数字然后替换为' 1'在另一栏中,我可以使用CASE语句执行此操作,如下所示

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

然而,PT_6列是从应用程序的复选框填充的,因此当选择多个复选框时,数据为86,75,81。

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

在需要它的其他列中 - 它们不是全部2位数,有些是3位所以我想如果我使用某种形式的LIKE,我可以错误地从175中取出75例

一些示例数据和更多信息,对于此示例,coumn 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

谢谢, 艾伦

1 个答案:

答案 0 :(得分:2)

回答问题的原始版本:

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