You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:48:04