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

SQL分类数据正则筛选需求:主分类与子分类提取

嘿,这两个SQL查询需求不难搞定,咱们根据你给出的分类编号规则一步步来:

1. 筛选所有主分类记录

根据你的描述,主分类的sort_id是纯数字(没有小数点),而且你提到正则[0-9][0-9],说明主分类是两位数字编号。我们可以用正则精准匹配这种“纯两位数字、无小数点”的格式,不同数据库的写法如下:

  • MySQL/MariaDB:
SELECT * 
FROM categories 
WHERE sort_id REGEXP '^[0-9]{2}$';

这里的^和$是锚点,确保整个sort_id就是两位数字,彻底排除带小数点的子分类。

  • PostgreSQL:
    PostgreSQL用~作为正则匹配运算符,写法类似:
SELECT * 
FROM categories 
WHERE sort_id ~ '^[0-9]{2}$';
  • SQL Server:
    可以用PATINDEX函数来匹配正则,或者用LIKE组合判断:
-- 方法1:用PATINDEX
SELECT * 
FROM categories 
WHERE PATINDEX('^[0-9][0-9]$', sort_id) = 1;

-- 方法2:用LIKE组合
SELECT * 
FROM categories 
WHERE sort_id LIKE '[0-9][0-9]' AND sort_id NOT LIKE '%.%';

如果你的主分类编号可能是1位或更多位数(不局限两位),只需要把正则里的[0-9]{2}改成[0-9]+,就能匹配任意位数的纯数字主分类了。

2. 根据指定主分类筛选子分类

比如要筛选主分类10的所有子分类,子分类的格式是主分类编号.子分类编号,我们需要匹配以10.开头的sort_id:

  • MySQL/MariaDB:
SELECT * 
FROM categories 
WHERE sort_id REGEXP '^10\.[0-9]+$';

^10\.确保以10.开头,[0-9]+$表示后面跟着至少一位数字直到结尾,这样就能精准匹配该主分类的直接子分类。如果需要包含多级子分类(比如10.10.20),可以去掉$锚点,改成^10\.。

  • PostgreSQL:
SELECT * 
FROM categories 
WHERE sort_id ~ '^10\.[0-9]+$';
  • SQL Server:
    同样可以用PATINDEX或LIKE:
-- 方法1:用PATINDEX匹配直接子分类
SELECT * 
FROM categories 
WHERE PATINDEX('^10\.[0-9]+$', sort_id) = 1;

-- 方法2:用LIKE,支持多级子分类的话去掉后面的NOT LIKE
SELECT * 
FROM categories 
WHERE sort_id LIKE '10.%' AND sort_id NOT LIKE '10.%.';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:33:18