SQL中如何查询存储为VARCHAR类型的有效整数字段数据
实现方式(按常用数据库分类)
核心逻辑是先通过过滤规则排除N.A.和非整数字符串,再做类型转换即可避免报错,你可以根据使用的数据库选择对应查询语法。
MySQL
-- 仅查询有效整数数据 SELECT * FROM 你的表名 WHERE profit != 'N.A.' -- 正则匹配正负整数:可选负号开头,后续全为数字 AND profit REGEXP '^-?[0-9]+$'; -- 如果需要将profit转为数值类型用于计算 SELECT CAST(profit AS SIGNED) AS profit_num, year, `rank`, company, revenue FROM 你的表名 WHERE profit != 'N.A.' AND profit REGEXP '^-?[0-9]+$';
SQL Server
SELECT * FROM 你的表名 WHERE profit != 'N.A.' AND ISNUMERIC(profit) = 1 -- 额外过滤排除小数、特殊符号、科学计数法等非整数内容 AND profit NOT LIKE '%.%' AND profit NOT LIKE '%$%' AND profit NOT LIKE '%e%'; -- 转整数用法 SELECT CAST(profit AS INT) AS profit_num, year, [rank], company, revenue FROM 你的表名 WHERE profit != 'N.A.' AND ISNUMERIC(profit) = 1 AND profit NOT LIKE '%.%' AND profit NOT LIKE '%$%' AND profit NOT LIKE '%e%';
PostgreSQL
-- 方式1:正则匹配 SELECT * FROM 你的表名 WHERE profit != 'N.A.' AND profit ~ '^-?[0-9]+$'; -- 方式2:用TRY_CAST自动忽略转换失败的行,写法更简洁 SELECT * FROM 你的表名 WHERE profit != 'N.A.' AND TRY_CAST(profit AS INTEGER) IS NOT NULL;
注意事项
如果担心SQL执行顺序导致先执行类型转换报错,可以用子查询先过滤再做转换:
SELECT CAST(profit AS INT) AS profit_num, year, `rank`, company, revenue FROM ( SELECT * FROM 你的表名 WHERE profit != 'N.A.' -- 替换为对应数据库的过滤规则 AND profit REGEXP '^-?[0-9]+$' ) AS filtered_table;
正则匹配的方式比ISNUMERIC类函数精准度更高,可以直接匹配正负整数规则,避免把带特殊符号、小数、科学计数法的内容误判为有效数值。
内容的提问来源于stack exchange,提问作者julz oh
相关产品推荐
相关产品推荐

