【问题标题】:SQL-how to get the count of number substrings in a string in a columnSQL-如何获取列中字符串中数字子字符串的计数
【发布时间】:2026-01-25 02:15:02
【问题描述】:

我有一个名为 Garden 的表。

Garden 表中有名为Fruit 的列,包含数千行 Fruit 的每一行都有逗号分隔的值,如AppleBananaPear 等。

我想要获取Fruit 列中每一行的水果数 比如如果第一行有AppleBananaPear,那么计数应该返回3。

如何为它编写一个 sql 查询。

我尝试使用正则表达式,但它不起作用。

【问题讨论】:

  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...
  • 将记录作为逗号分隔值存储在表中是一种不好的做法。避免它。

标签: sql oracle


【解决方案1】:

如果您使用的是 Oracle 数据库,那么您可以使用 REGEXP_COUNT 正则表达式。查找以下示例:-

创建餐桌花园(水果varchar2(1000)); 插入花园 VALUES('apple,bananan,pear'); 插入花园 VALUES('橙子,香蕉'); 插入花园 VALUES('苹果、香蕉、梨、橙'); 从花园中选择*; 输出:- 水果 ------------------ 苹果、香蕉、梨 橙子,香蕉 苹果、香蕉、梨、橙

现在您可以使用以下查询来获取计数。

select REGEXP_COUNT(Fruit, ',')+1 as fruit_count from garden;

【讨论】:

  • 我认为这对于 Oracle 来说是更好的解决方案。
【解决方案2】:

这将起作用:

select length(Fruit) - length(replace(Fruit, ',', '')) + 1 from Garden

这部分len(Fruit) - len(replace(Fruit, ',', ''))返回你的字符串中有多少个逗号,总是比逗号多一个,所以我们需要加1。

【讨论】:

  • 我是 ORACLE DBMS。感谢您的回复。它给出的错误为 ORA-00904: "LEN": invalid identifier 00904. 00000 - "%s: invalid identifier"
  • @AbhinayKumar 在 Oracle 中,该函数称为 LENGTH。更新了我的答案,现在可以使用了。
  • @AbhinayKumar 然后您应该接受答案(答案分数下方的绿色勾号)。并可选择投票。