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

Oracle截取子字符串:如何提取日期连字符前内容?是否用正则?

如何从包含日期的字符串中提取连字符前的目标内容?

当然可以实现!不管是用简单的字符串截取方法,还是灵活的正则表达式都能搞定,下面给你几种实用的方案:

方案一:字符串截取法(适合格式固定的场景)

如果你的字符串格式完全固定,比如都是「目标内容-日期时间」的结构(就像你给出的TEST-01-2019/10/10 01:01:20),那么直接找第二个连字符的位置,截取前面的内容就很高效。

举个Python的例子:

s = "TEST-01-2019/10/10 01:01:20"
# 先找到第一个连字符的位置,再从它的下一位找第二个连字符
second_dash_pos = s.index('-', s.index('-') + 1)
result = s[:second_dash_pos]
print(result)  # 输出:TEST-01

如果是在SQL场景(比如MySQL),还可以用内置的SUBSTRING_INDEX函数,一步到位:

SELECT SUBSTRING_INDEX('TEST-01-2019/10/10 01:01:20', '-', 2) AS target_content;

这个函数会按-分割字符串,取前2个部分,直接返回TEST-01。

方案二:正则表达式法(适合格式有变化的场景)

如果你的字符串格式偶尔有小变动(比如目标内容里可能有特殊字符,但日期部分始终是「数字/数字/数字」的格式),正则表达式会更灵活。

核心思路是:匹配字符串开头到「日期前的连字符」之间的内容。举个Python的实现例子:

import re
s = "TEST-01-2019/10/10 01:01:20"
# 正则捕获组:匹配开头到"-年份"之前的内容
match_result = re.match(r'^(.+?)-\d{4}/', s)
if match_result:
    target_content = match_result.group(1)
    print(target_content)  # 输出:TEST-01

这里的正则^(.+?)-\d{4}/含义是:

  • ^:匹配字符串的开头
  • (.+?):非贪婪匹配任意字符,把这部分捕获为我们要的目标内容
  • -\d{4}/:匹配「连字符+4位数字+斜杠」(对应日期里的-2019/),以此作为结束标记

这种方法哪怕目标内容里有其他特殊字符,只要日期部分的格式不变,都能准确提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:18:21