【发布时间】:2015-09-09 14:53:25
【问题描述】:
我需要从审计/日志表中清除 SSN,我们无法更改应用程序。
应用程序在表“redcap_log_event”的“sql_log”列中生成审计/日志。此列只是在应用程序中执行每个命令时应用程序使用的一长串 SQL。
这是 sql_log 列的示例,当您将其复制并粘贴出来时,回车符在该列的 SQL 字符串中。插入最终出现在应用程序的 sql_log 列中 -
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'study_id', '123456789', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'cmr_date', '2015-09-02', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'first_name', 'bnm', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'last_name', 'asdfggh', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'dob', '2015-09-02', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'age_at_cmr', '21', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'social_security_number', '987582154', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'sex', '1', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'ethnicity', '1', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'demographics_abef_complete', '2', NULL);
INSERT INTO redcap_data (project_id, event_id, record, field_name, value, instance) VALUES (6, 21, 'Ashby, zbn', 'participant_id', 'asdfggh, zbn', NULL)
我希望最终通过表格上的触发器从上述数据中清除 9 位 SSN 值,但现在我正在努力获取子字符串、正则表达式、定位以按照我的需要工作 - 的sql_log 列中文本“social_security_number”的位置总是不同,因为在它之前插入了名字和姓氏,所以我需要以某种方式在“social_security_number”的右侧找到一个不同的位置
任何想法表示赞赏!
【问题讨论】:
-
MySQL 似乎还不支持正则表达式的替换功能。您可能必须尝试使用来自外部库的用户定义函数 (UDF):MySQL UDF with Regex
-
如果可以使用正则表达式,它可以用这个来完成:
/(?<=social_security_number', )('\d{9}')/Ug(demo) -
谢谢。正则表达式在 MySQL 中可用,但我不确定我是如何将该 sql 实现到语句中的?
标签: mysql regex position substring locate