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

Databricks SQL:如何验证含短横线的字符串分段是否在有效值列表

解决Databricks SQL中含内部短横线的三段式字符串拆分验证问题

核心思路是:既然字符串是严格的三段结构(哪怕后两段内部有短横线),那我们只需要定位第一个短横线和最后一个短横线的位置,就能准确拆分出三段内容,不用管中间有多少短横线。

步骤1:拆分三段字符串

用Databricks SQL自带的字符串函数就能实现,示例SQL如下(假设目标表是data_table,待处理字段是target_string):

SELECT
  target_string,
  -- 提取第一段:从开头到第一个短横线之前的内容
  SUBSTR(target_string, 1, INSTR(target_string, '-') - 1) AS substring1,
  -- 提取第二段:第一个短横线之后,到最后一个短横线之前的内容
  SUBSTR(
    target_string,
    INSTR(target_string, '-') + 1,
    LENGTH(target_string) - INSTR(target_string, '-') - INSTR(REVERSE(target_string), '-')
  ) AS substring2,
  -- 提取第三段:最后一个短横线之后的内容
  SUBSTR(target_string, LENGTH(target_string) - INSTR(REVERSE(target_string), '-') + 2) AS substring3
FROM data_table
WHERE target_string LIKE '%-%-%' -- 先过滤出至少包含两个短横线的字符串

步骤2:验证第二段和第三段的有效性

基于上面拆分出的字段,直接用IN子句匹配各自的有效值列表即可。假设第二段有效值是('dev-test', 'prod-stage'),第三段有效值是('us-east', 'eu-west-1'),示例SQL:

SELECT
  target_string,
  substring1,
  substring2,
  substring3,
  -- 验证第二段是否有效
  CASE WHEN substring2 IN ('dev-test', 'prod-stage') THEN 'VALID' ELSE 'INVALID' END AS substring2_status,
  -- 验证第三段是否有效
  CASE WHEN substring3 IN ('us-east', 'eu-west-1') THEN 'VALID' ELSE 'INVALID' END AS substring3_status
FROM (
  -- 嵌套步骤1的拆分逻辑
  SELECT
    target_string,
    SUBSTR(target_string, 1, INSTR(target_string, '-') - 1) AS substring1,
    SUBSTR(
      target_string,
      INSTR(target_string, '-') + 1,
      LENGTH(target_string) - INSTR(target_string, '-') - INSTR(REVERSE(target_string), '-')
    ) AS substring2,
    SUBSTR(target_string, LENGTH(target_string) - INSTR(REVERSE(target_string), '-') + 2) AS substring3
  FROM data_table
  WHERE target_string LIKE '%-%-%'
) split_result

关键函数说明

  • INSTR(str, '-'):返回字符串中第一个短横线的位置
  • REVERSE(str):反转字符串,配合INSTR就能找到原字符串最后一个短横线的位置(反转后第一个短横线的位置,对应原字符串末尾到最后一个短横线的距离)
  • SUBSTR(str, start, length):按起始位置和长度截取字符串,精准提取目标段内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:40:21