匹配字符串中的精确数字并替换 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
我需要匹配一组精确的数字,然后用另一列中的“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