如何将DB2中使用XMLQuery、fn:matches的子串校验逻辑迁移至PostgreSQL的WHERE子句实现
PostgreSQL 子串类型校验方案
场景1:校验子串是否为纯整数
直接使用PostgreSQL内置的正则匹配操作符~即可实现,纯非负整数校验的WHERE子句写法如下:
-- 校验已提取的子串是否为纯整数 WHERE 已提取的数字子串 ~ '^[0-9]+$' -- 若需校验固定位数的整数(比如原逻辑中的2位数字),写法调整为 WHERE 已提取的数字子串 ~ '^[0-9]{2}$'
如果需要兼容带正负号的整数,可将正则替换为^[+-]?[0-9]+$。
场景2:校验子串是否为纯英文字母字符串
同样用正则匹配实现,纯英文字母校验的WHERE子句写法如下:
-- 校验已提取的子串是否为纯英文字母 WHERE 已提取的字符串子串 ~ '^[a-zA-Z]+$' -- 若需校验固定位数的字母(比如原逻辑中的2位字母),写法调整为 WHERE 已提取的字符串子串 ~ '^[a-zA-Z]{2}$'
如果需要大小写不敏感的匹配,可将操作符替换为~*,无需额外调整正则规则。
原DB2逻辑的完整等价实现
如果不需要单独拆分提取子串,可直接在原字段上做全量匹配,一行即可实现与原DB2逻辑完全一致的校验能力:
WHERE 原字段 ~ '^[a-zA-Z]{2}[0-9]{2}$'
注:原DB2写法中[0-9][2]应为[0-9]{2}的笔误,上述实现默认按照「2位英文字母+2位数字」的匹配规则开发
内容的提问来源于stack exchange,提问作者Epicenter
相关产品推荐
相关产品推荐

