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

Google Sheets Query:如何提取字符串中首个'-'前的内容?

解决方案

你可以通过两种方式结合这两个公式,核心是用ARRAYFORMULA批量处理QUERY返回的结果,或者用LET函数简化重复调用:

方法1:直接嵌套(快速实现)

把QUERY的结果作为REGEXEXTRACT的数据源,用ARRAYFORMULA批量处理每一行的Col2:

=ARRAYFORMULA(IFERROR(
  {
    QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),
    REGEXEXTRACT(QUERY(IMPORTRANGE(...),"select Col2 where Col2!=''",FALSE),"^[^-]*")
  }
))

这个公式会保留原Col2的同时,在右侧新增一列提取后的内容。如果不需要原Col2,只保留提取结果,可以调整为:

=ARRAYFORMULA(IFERROR(
  {
    INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,1),
    INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,2),
    REGEXEXTRACT(INDEX(QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),,3),"^[^-]*")
  }
))

方法2:用LET函数优化(提升效率)

重复调用IMPORTRANGE会增加加载时间,用LET把QUERY的结果存为变量,再统一处理:

=LET(
  raw_data, QUERY(IMPORTRANGE(...),"select Col5, Col1, Col2 where Col2!=''",FALSE),
  ARRAYFORMULA(IFERROR(
    {
      INDEX(raw_data,,1),
      INDEX(raw_data,,2),
      REGEXEXTRACT(INDEX(raw_data,,3),"^[^-]*")
    }
  ))
)
  • raw_data存储QUERY拉取的原始数据,避免重复调用IMPORTRANGE
  • INDEX(raw_data,,3)定位到原始数据中的Col2列,用REGEXEXTRACT批量提取第一个“-”前的内容
  • IFERROR用来处理Col2中没有“-”的情况,此时会返回原字符串;如果想这种情况返回空,可把正则改成^[^-]*?(?=-)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:52:22