4.7 KiB
校核分类
校核规则主要分为无前提条件校核和有前提条件校核两个部分。
无前提条件校核
是指该部分校核,不存在前置条件,直接作为校核(查询)依据,该部分校核多为单条件,
或为某指标项为空(或未填写);
或为某指标项包含特殊字符串(多使用正则匹配);
或为某指标项不为6或8位数字(由于当前描述时间指标项均为字符串类型,可以填写到月,也可以精确的日,其实潜在描述不为 时间字符串
);
或为某指标项是否超出代码值范围等。
/* 说明:xx 为空 ,主要是针对未录入操作,针对MySQL数据库存在null和空字符串两种状态,索引需要分开进行限制 */ -- 姓名中含有除“·”之外的特殊符号、数字或字母 select count(1) from A01_temp WHERE 1=1 AND A01_temp.A0000 = :A0000 AND ( A0101 regexp '[0-9a-zA-Z]'OR A0101 regexp ':digit:' OR A0101 regexp ':punct:' OR A0101 regexp '[:whitespace:]' OR A0101 regexp ':cntrl:' OR A0101 regexp ':space:' OR A0101 LIKE '%(%' OR A0101 LIKE '%)%' OR A0101 LIKE '%(%' OR A0101 LIKE '%)%' OR A0101 like '% %' OR A0101 like '% %' )
/* 说明:xx 包含特殊符号、数字或字母 ,主要是使用正则进行匹配,数字“0-9”、字母“A-Za-z”等 */ -- “出生年月”不为6或8位数字 select count(1) from A01_temp WHERE 1=1 AND A01_temp.A0000 = :A0000 AND isDate(A0107)=0 and A0107 is not null and A0107 != ''
/* 说明:xx 不为6或8位数字 ,主要是针对时间字段,但是数据库是使用字符串进行存储的,有的时候会精确到日,有时候精确到月。 其中:isDate() 是在数据库内置的判断时间字符串函数 */ -- “民族”超出代码值范围 select count(1) from A01_temp WHERE 1=1 AND A01_temp.A0000 = :A0000 AND A0117 NOT IN ( SELECT code_value FROM code_value WHERE code_type = 'GB3304' and CODE_STATUS='1' and CODE_LEAF='1') and A0117 is not null and A0117 != ''
/* 说明:xx 超出代码值范围 ,主要是针对使用字典框或下拉框类别,应该正确选择字典字符串,非范围内或废弃字典均会被筛选出来。 */
有前提条件校核
是指该部分校核,不存在前置条件,直接作为校核(查询)依据,该部分校核多为单条件, 或为某指标项为空(未填写); 或为某指标项(时间指标)不在某时间范围,或与校核截至时间比较; 或为某指标项是否超出代码值范围等。
补充:其中也存在某些前提条件,主要看校核描述是否存在前提条件因子。 -- 机构信息集“机构类别”超出代码值范围或为根节点代码值
'' AND B0131 NOT IN(SELECT code_value FROM code_value WHERE code_type='ZB04' and CODE_STATUS='1' and CODE_LEAF='1')]]> 存在前提条件“属于法人单位的机构”才进行 (补充:WHERE 1=1 AND B01_temp.B0111 = :B0111 AND特定格式)
每年变动规则
该部分校核规则多与指定时间有关,脚本中会写死具体条件。当汇数年度发生变化,该部分年份信息,也需要跟着修改。
总结
数据校核是一项解决数据质量重要手段,但是往往校核规则会被简化成俗语,有些精简的比较深的话,里面包含大量的前提条件;同时有些被简化的俗语,按照直观意思无法理解。
有些精简的比较深的话,里面包含大量的前提条件
:涉及存在前提条件,需要积累一些公务员人事的常识,或者咨询定制规则的用户。
被简化的俗语,按照直观意思无法理解
:需要咨询定制规则的用户,用户目的到底是什么。
往往在完成校核条件定义的时候,开发人员常使用固定SQL语句进行实现,当然也可以通过校核方案进行配置,但是这些条件都仅仅是针对简单规则易用。