【问题标题】:Redacting patient name from SQL Server text column从 SQL Server 文本列中编辑患者姓名
【发布时间】:2020-09-29 21:22:06
【问题描述】:

我有一个用于医学研究的 SQL Server 2016 数据库。我有一个有四列的表:

  • medical_record 编号 (nchar(20))
  • patient_last_name (nchar(100))
  • patient_first_name (nchar(100))
  • diagnostic_text(文本)

我想从 diagnostic 列中删除所有受保护的健康信息 (PHI)。不幸的是,有时本专栏中会提到患者的姓名,我想编辑此信息,将患者姓名替换为“XXXXXX”之类的内容。

我唯一能想到的就是使用游标,遍历每条记录并在每条记录上使用REPLACE,例如:

REPLACE (@diagnostic_text, @patient_last_name), 'XXXXX')

有没有更好的方法来做到这一点?我有大约 500k 行要处理。

我非常感谢任何反馈。我是医生,不是数据库专家。谢谢!

【问题讨论】:

  • 如果diagnostic_text 真的是text,那么你将面临一大堆问题。诊断文本中的信息是否可能是手动输入的,因此会出现拼写错误、缩写和人们倾向于编写的其他“快捷方式”?
  • ntexttext 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)See details here

标签: sql sql-server string sql-update


【解决方案1】:

你可能想要update:

update mytable
set diagnostic_text = replace(diagnostic_text, patient_last_name, 'XXX')

但是,如果患者姓名包含在其他诊断词中,这可能会产生副作用。

假设患者是Bill,并且诊断文本包含单词'Billable',它将变为'XXXable'

一个更安全的选择是搜索整个单词(以空格分隔):

update mytable
set diagnostic_text = ltrim(rtrim(replace(
    ' ' + diagnostic_text + ' ', 
    ' ' + patient_last_name + ' ', 
    ' XXX '
)))

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 2013-10-14
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多