如何从含“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
相关产品推荐
相关产品推荐

