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

如何在Vertical SQL中从自由文本字符串提取所需日期?

Vertica SQL 自由文本日期提取实现方案

适配场景说明

针对你提到的Note自由文本字段存储的M/D/YY格式日期,可通过Vertica内置正则函数实现提取需求,无需额外工具。

方案一:提取全部日期并空格分隔存储

操作步骤

  1. 新增存储全量日期的字段
ALTER TABLE 你的业务表名 ADD COLUMN all_extracted_dates VARCHAR(200);
  1. 批量填充字段值
UPDATE 你的业务表名
SET all_extracted_dates = (
    SELECT STRING_AGG(date_match, ' ')
    FROM REGEXP_MATCHES(Note, '\b\d{1,2}/\d{1,2}/\d{2}\b', 'g') AS t(date_match)
);

正则规则说明

\b\d{1,2}/\d{1,2}/\d{2}\b 限定匹配1-2位月份、1-2位日期、2位年份的组合,单词边界避免匹配到其他带斜杠的非日期数字。

方案二:提取最后一个日期存储

操作步骤

  1. 新增存储末次日期的字段,建议直接存DATE类型方便后续日期计算,也可按需存字符串类型
ALTER TABLE 你的业务表名 ADD COLUMN last_extracted_date DATE;
  1. 批量填充字段值
UPDATE 你的业务表名
SET last_extracted_date = TO_DATE(
    REGEXP_SUBSTR(
        Note,
        '\b\d{1,2}/\d{1,2}/\d{2}\b',
        1,
        REGEXP_COUNT(Note, '\b\d{1,2}/\d{1,2}/\d{2}\b')
    ),
    'MM/DD/YY'
);

逻辑说明

先通过REGEXP_COUNT统计字段中符合格式的日期总数,再通过REGEXP_SUBSTR取最后一个匹配结果,转成日期类型存储即可,若只需存字符串直接去掉TO_DATE转换逻辑。

效果验证

和你给出的示例完全匹配:

  • 文本1st order on 3/2/21, second 5/5/21:全量日期返回3/2/21 5/5/21,末次日期返回5/5/21
  • 文本first delivery 2/2/21 second one 8/30/21:全量日期返回2/2/21 8/30/21,末次日期返回8/30/21
  • 文本reported 1st: 2/2/21.:两个字段均返回2/2/21

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:21:03