目录
1、PG正则匹配
| 操作符 | 描述 |
| ~ | 匹配正则表达式,大小写敏感 |
| ~* | 匹配正则表达式,大小写不敏感 |
| !~ | 不匹配正则表达式,大小写敏感 |
| !~* | 不匹配正则表达式,大小写不敏感 |
2、使用
需求:校验数据合理性,例如有2张表,校验表A的字段co1是来源了表B的col2。
例如下面的具体需求:
(1)需求1 校验 test_project表的save_year 不是 test_product的sava_date里面的年的数据、
2张数据表,test_product(id,save_date,project_id,...) test_project(id,save_year,...)
test_product.project_id = test_project.id。 需要校验test_product中的字段save_date,是参照
test_project表中的save_year字段的年。找出save_date的年和save_year不匹配的数据

sql: 找出save_date的年和save_year不匹配的数据
select A.save_date,A1.save_year FROM gp_toolkit.test_product A inner join gp_toolkit.test_project A1 on A.project_id= A1.id
where cast(A.save_date as varchar) !~concat( A1.save_year,'-','(\w*)') or A.save_date is null

(2)需求2 找出文件表文件命名不符合规范的数据。 例如文件表file, 作业表表job
file( file_name, id,job_id)
job(id,job_mc,xxx)
文件表file_name 的生成规则,必须要 job_name +'报告‘ + 数字
因此file_name 是正则匹配
select A.*
FROM file A inner join job B on A.job_id= B.id
where cast(A.file_name) !~concat( B.job_name,'报告','^[0-9]*') or A.save_date is null
文章讨论了如何使用SQL查询来检查两张表(test_product和test_project)中save_date字段与save_year字段的年份对应关系,筛选出不匹配的数据。SQL语句包括INNERJOIN操作和日期格式验证。
1405

被折叠的 条评论
为什么被折叠?



