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

如何在SQL Server中从字符串列提取日期并导入两个datetime列

SQL Server 提取日期字段解决方案

针对你的需求,可通过组合字符串函数提取日期部分并转换为datetime类型,完整实现代码如下:

INSERT INTO #tdt (ID, Descr, Prevdate, Postdate)
SELECT
    ID,
    LTRIM(LEFT(Descr, CHARINDEX('-', Descr) - 1)) AS Descr,
    -- 提取起始日期并转换为datetime
    CONVERT(datetime, SUBSTRING(Descr, CHARINDEX('-', Descr) + 2, CHARINDEX(' to ', Descr) - CHARINDEX('-', Descr) - 2)) AS Prevdate,
    -- 提取结束日期并转换为datetime
    CONVERT(datetime, SUBSTRING(Descr, CHARINDEX(' to ', Descr) + 4, LEN(Descr) - CHARINDEX(' to ', Descr) - 3)) AS Postdate
FROM #src;

-- 查询目标表验证结果
SELECT * FROM #tdt;

逻辑拆解

  1. Descr字段处理:在你原有提取逻辑基础上添加LTRIM(),移除字段前的多余空格(如第一条数据-前的空格)。
  2. Prevdate提取:
    • 通过CHARINDEX('-', Descr) + 2定位到- 后的日期起始位置
    • 利用CHARINDEX(' to ', Descr)获取分隔符位置,计算出日期字符串长度后用SUBSTRING截取
    • 用CONVERT(datetime, ...)将截取的字符串转为日期类型
  3. Postdate提取:
    • 通过CHARINDEX(' to ', Descr) + 4定位到to后的日期起始位置
    • 结合LEN(Descr)计算剩余字符串长度,用SUBSTRING截取结束日期
    • 同样转换为datetime类型

异常处理提示

若源表存在Descr不包含-或to的异常数据,建议添加WHERE条件过滤(如WHERE CHARINDEX('-', Descr) > 0 AND CHARINDEX(' to ', Descr) > 0),避免因字符串截取失败导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:22:12