如何用REGEXP区分纯文本与字母数字列?验证给定SQL方案是否可行
分析给定SQL方案的可行性
这个SQL方案不可行,问题集中在语法错误和匹配逻辑偏差上,具体如下:
- 语法层面报错:两条SQL的正则表达式都未闭合单引号,且
--header、--trailer这类注释前没有空格,会直接导致SQL解析失败。 - 匹配逻辑完全不符合需求:
- 第一条SQL用
.*[a-z]筛选纯文本记录,但示例中的Res state Inc包含大写字母,该正则只能匹配含小写字母的内容,会漏掉仅含大写字母和空格的纯文本;同时它没有排除数字,会把带数字的混合记录也误选进来。 - 第二条SQL用
.*[^a-z]筛选字母数字混合记录,[^a-z]代表「非小写字母的任意字符」,空格、大写字母、数字都满足这个条件,会把纯文本里的空格、大写字母记录也误判为Trailer表的目标数据。
- 第一条SQL用
修正后的参考方案
以MySQL环境为例,贴合需求的正确写法如下:
- 筛选仅含字母、空格的纯文本记录(存入Header_table):
SELECT * FROM record_table WHERE record REGEXP '^[A-Za-z ]+$';
- 筛选同时包含字母和数字的混合记录(存入Trailer_Table):
SELECT * FROM record_table WHERE record REGEXP '[A-Za-z]' AND record REGEXP '[0-9]';
内容的提问来源于stack exchange,提问作者AJS
相关产品推荐
相关产品推荐

