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

如何从含“Date Out”的字符串中提取后续日期(SQL/C#)

从含"Date Out"的字符串中提取日期

一、SQL端直接提取(推荐)

直接用SQL自带的CHARINDEX和SUBSTRING函数处理,无需把数据拉到应用层,效率更高。

基础写法

通过CHARINDEX定位"Date Out"的位置,再用SUBSTRING截取后面固定10位的yyyy-MM-dd格式日期:

SELECT 
    comment,
    SUBSTRING(
        comment,
        CHARINDEX('Date Out', comment) + 8, -- "Date Out"共8个字符,跳过该短语
        10 -- 截取yyyy-MM-dd的固定10位长度
    ) AS extracted_date
FROM your_table_name;

兼容多余空格的写法

如果"Date Out"后可能存在多个空格,用LTRIM去除日期前的空白字符:

SELECT 
    comment,
    LTRIM(
        SUBSTRING(
            comment,
            CHARINDEX('Date Out', comment) + 8,
            15 -- 预留足够长度再去除空格
        )
    ) AS extracted_date
FROM your_table_name;

二、修正你的C#代码

方法1:Substring优化版

你之前的问题是关键词大小写不匹配,且未跳过"Date Out"后的空格,修改后代码如下:

string myString = "Hello how are you doing Date Out yyyy-MM-dd";
string keyword = "Date Out";
// 忽略大小写定位关键词,兼容用户输入的大小写差异
int keywordPos = myString.IndexOf(keyword, StringComparison.OrdinalIgnoreCase);
if (keywordPos != -1)
{
    // 跳过关键词和后面的空格
    int dateStartPos = keywordPos + keyword.Length + 1;
    // 截取10位日期
    string extractedDate = myString.Substring(dateStartPos, 10);
    Console.WriteLine(extractedDate);
}

方法2:正则表达式修正版

之前的正则未设置捕获组,无法获取日期内容。改用带捕获组的正则,精准匹配日期格式:

string s = "Hello how are you doing Date Out yyyy-MM-dd";
// 匹配"Date Out"后接的yyyy-MM-dd格式日期,忽略大小写
var match = Regex.Match(s, @"Date Out (\d{4}-\d{2}-\d{2})", RegexOptions.IgnoreCase);
string extractedDate = string.Empty;
if (match.Success)
{
    extractedDate = match.Groups[1].Value;
    Console.WriteLine(extractedDate);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:33:38