问题描述
嗨,团队,
我需要验证给定格式的给定字符串。我有一张下面的表。
我在上述查询中有zip_code_format和zip_code字段。
zip_code_format在不同的表中。
我需要针对zip_code_format字段验证zip_code,并在sql或pl/sql中获得TRUE/FALSE。
我想将zip_code和zip_code_format传递给pl/sql函数,以获得TRUE/FALSE值作为回报。
不知道如何开始查询。所以,我需要一个sql查询的帮助。
预期产出:
谢谢你的帮助,
我需要验证给定格式的给定字符串。我有一张下面的表。
with t as ( select 'AR' country,8 zip_code_length,'A####AAA' zip_code_format,'B6789CDF' zip_code from dual union all select 'AR' country,8 zip_code_length,'A####AAA' zip_code_format,'6789CDF' zip_code from dual union all select 'BR' country,9 zip_code_length,'#####-###' zip_code_format,'12345-678' zip_code from dual union all select 'BR' country,9 zip_code_length,'#####-###' zip_code_format,'BC345-678' zip_code from dual union all select 'CA' country,7 zip_code_length,'A#A #A#' zip_code_format,'B2C 8A9' zip_code from dual union all select 'CA' country,7 zip_code_length,'A#A #A#' zip_code_format,'BbC CA9' zip_code from dual union all select 'CH' country,4 zip_code_length,'####' zip_code_format,'1234' zip_code from dual union all select 'CH' country,4 zip_code_length,'####' zip_code_format,'123456' zip_code from dual union all select 'CZ' country,6 zip_code_length,'### ##' zip_code_format,'123 45' zip_code from dual union all select 'CZ' country,6 zip_code_length,'### ##' zip_code_format,'12345' zip_code from dual union all select 'EC' country,6 zip_code_length,'A####A' zip_code_format,'B3456C' zip_code from dual union all select 'EC' country,6 zip_code_length,'A####A' zip_code_format,'BBB56C' zip_code from dual union all select 'PL' country,6 zip_code_length,'##-###' zip_code_format,'12-345' zip_code from dual union all select 'PL' country,6 zip_code_length,'##-###' zip_code_format,'12-34567' zip_code from dual ) select * from t;
我在上述查询中有zip_code_format和zip_code字段。
zip_code_format在不同的表中。
我需要针对zip_code_format字段验证zip_code,并在sql或pl/sql中获得TRUE/FALSE。
我想将zip_code和zip_code_format传递给pl/sql函数,以获得TRUE/FALSE值作为回报。
不知道如何开始查询。所以,我需要一个sql查询的帮助。
预期产出:
country zip_code_length zip_code_format zip_code validation AR 8 A####AAA B6789CDF TRUE AR 8 A####AAA 6789CDF FALSE BR 9 #####-### 12345-678 TRUE BR 9 #####-### BC345-678 FALSE CA 7 A#A #A# B2C 8A9 TRUE CA 7 A#A #A# BbC CA9 FALSE CH 4 #### 1234 TRUE CH 4 #### 123456 FALSE CZ 6 ### ## 123 45 TRUE CZ 6 ### ## 12345 FALSE EC 6 A####A B3456C TRUE EC 6 A####A BBB56C FALSE PL 6 ##-### 12-345 TRUE PL 6 ##-### 12-34567 FALSE
谢谢你的帮助,
专家解答
我假设
# => 匹配任何数字
A => 匹配任何字母
如果是这样,这里有一种方法:
使用正则表达式将数字转换为 #,将字母转换为A。
然后检查结果字符串是否与您想要的格式匹配:
# => 匹配任何数字
A => 匹配任何字母
如果是这样,这里有一种方法:
使用正则表达式将数字转换为 #,将字母转换为A。
然后检查结果字符串是否与您想要的格式匹配:
with t as ( select 'AR' country,8 zip_code_length,'A####AAA' zip_code_format,'B6789CDF' zip_code from dual union all select 'AR' country,8 zip_code_length,'A####AAA' zip_code_format,'6789CDF' zip_code from dual union all select 'BR' country,9 zip_code_length,'#####-###' zip_code_format,'12345-678' zip_code from dual union all select 'BR' country,9 zip_code_length,'#####-###' zip_code_format,'BC345-678' zip_code from dual union all select 'CA' country,7 zip_code_length,'A#A #A#' zip_code_format,'B2C 8A9' zip_code from dual union all select 'CA' country,7 zip_code_length,'A#A #A#' zip_code_format,'BbC CA9' zip_code from dual union all select 'CH' country,4 zip_code_length,'####' zip_code_format,'1234' zip_code from dual union all select 'CH' country,4 zip_code_length,'####' zip_code_format,'123456' zip_code from dual union all select 'CZ' country,6 zip_code_length,'### ##' zip_code_format,'123 45' zip_code from dual union all select 'CZ' country,6 zip_code_length,'### ##' zip_code_format,'12345' zip_code from dual union all select 'EC' country,6 zip_code_length,'A####A' zip_code_format,'B3456C' zip_code from dual union all select 'EC' country,6 zip_code_length,'A####A' zip_code_format,'BBB56C' zip_code from dual union all select 'PL' country,6 zip_code_length,'##-###' zip_code_format,'12-345' zip_code from dual union all select 'PL' country,6 zip_code_length,'##-###' zip_code_format,'12-34567' zip_code from dual ) select zip_code, zip_code_format, case when regexp_replace ( regexp_replace ( zip_code, '[0-9]', '#' ), '[A-Z]', 'A' ) = zip_code_format then 'TRUE' else 'FALSE' end valid from t; ZIP_CODE ZIP_CODE_FORMAT VALID B6789CDF A####AAA TRUE 6789CDF A####AAA FALSE 12345-678 #####-### TRUE BC345-678 #####-### FALSE B2C 8A9 A#A #A# TRUE BbC CA9 A#A #A# FALSE 1234 #### TRUE 123456 #### FALSE 123 45 ### ## TRUE 12345 ### ## FALSE B3456C A####A TRUE BBB56C A####A FALSE 12-345 ##-### TRUE 12-34567 ##-### FALSE
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。