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

如何使用SQL筛选字段中的非数值(字母、符号)数据?

解决方案:筛选非数值类记录

要从col1中仅提取字母、符号类数据(排除所有整数、浮点数,包括科学计数法格式的数值),可以根据你使用的数据库类型,选择对应的SQL语句:

MySQL/MariaDB

使用正则表达式匹配非数值记录,同时排除空值:

SELECT DISTINCT col1 
FROM table 
WHERE col1 IS NOT NULL
  AND col1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

解释:正则表达式^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$会匹配所有合法的数值格式(正负整数、正负浮点数、科学计数法表示的数值),NOT REGEXP则筛选出不匹配这些格式的记录。

PostgreSQL

和MySQL逻辑一致,使用~运算符进行正则匹配:

SELECT DISTINCT col1 
FROM table 
WHERE col1 IS NOT NULL
  AND col1 NOT ~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

SQL Server(2012及以上版本)

推荐用TRY_CAST函数更简洁可靠:它会尝试将col1转换为浮点数,转换失败则返回NULL,直接筛选这类记录即可:

SELECT DISTINCT col1 
FROM table 
WHERE col1 IS NOT NULL
  AND TRY_CAST(col1 AS FLOAT) IS NULL;

如果你的SQL Server版本不支持TRY_CAST,可以用正则匹配替代:

SELECT DISTINCT col1 
FROM table 
WHERE col1 IS NOT NULL
  AND PATINDEX('%[^0-9.-+eE]%', col1) > 0
  -- 额外排除仅含符号但不是有效数值的情况,比如'---'或'..'
  AND NOT (col1 LIKE '%[^0-9]%' AND col1 NOT LIKE '%[0-9]%');

Oracle

使用REGEXP_LIKE函数实现正则筛选:

SELECT DISTINCT col1 
FROM table 
WHERE col1 IS NOT NULL
  AND NOT REGEXP_LIKE(col1, '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$');

补充说明

  • 若不需要考虑科学计数法格式的数值,可以把正则中的([eE][-+]?[0-9]+)?部分去掉,简化表达式。
  • 若数据中存在空字符串(''),可在WHERE条件中添加AND col1 <> ''来排除。

内容的提问来源于stack exchange,提问作者James Raitsev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:02:47