如何匹配带0填充的table1与无0填充的table2的fiscal_code并提取table2数据?
匹配带前后0填充与无填充的税号字段
要找出table2中与table1实质相等的fiscal_codes,核心是先清理table1字段的前后0,再做关联匹配,以下是具体实现方案:
通用SQL实现
核心思路
通过字符串处理函数去除table1.fiscal_code开头和结尾的所有0,再与table2.fiscal_codes做等值关联,提取匹配的table2记录。
示例代码(MySQL/PostgreSQL适用)
SELECT DISTINCT t2.fiscal_codes FROM table1 t1 INNER JOIN table2 t2 ON TRIM(BOTH '0' FROM t1.fiscal_code) = t2.fiscal_codes;
代码说明
TRIM(BOTH '0' FROM t1.fiscal_code):同时清除字段开头和结尾的所有0,例如'0012345'或'123450'都会被处理为'12345'。DISTINCT:避免table2中同一fiscal_codes因多次匹配返回重复结果。
SQL Server适配写法
如果使用SQL Server 2017及以上版本,写法与上述一致;若版本较低,可嵌套使用LTRIM和RTRIM处理:
SELECT DISTINCT t2.fiscal_codes FROM table1 t1 INNER JOIN table2 t2 ON RTRIM(LTRIM(t1.fiscal_code, '0'), '0') = t2.fiscal_codes;
(注:SQL Server 2017+已支持TRIM('0' FROM t1.fiscal_code)语法,优先使用该写法)
内容的提问来源于stack exchange,提问作者Mariomaxi
相关产品推荐
相关产品推荐

