【问题标题】:Convert Varchar field to datetime in SQL Server在 SQL Server 中将 Varchar 字段转换为日期时间
【发布时间】:2026-01-25 11:15:01
【问题描述】:

我正在尝试将 varchar 日期转换为日期时间字段并且非常困难。它给了我:

从字符串转换日期和/或时间时转换失败。

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

我有以下两种日期时间格式:

  1. 日期字段类似于 21-12-200905-10-2005

  2. 日期字段类似于19-03-2018 14:59


select cast(convert(varchar,Stg_hw.date_of_birth,110)as date)
from Stg_Height_and_Weight Stg_hw
where Stg_hw.person_id = 1620458

select CONVERT(datetime,LEFT(date_of_birth,2)+SUBSTRING(Stg_hw.date_of_birth,4,2)+SUBSTRING(Stg_hw.date_of_birth,7,4)) 
from Stg_Height_and_Weight Stg_hw
where Stg_hw.person_id = 1620458

select cast(Stg_hw.date_of_birth as date)
from Stg_Height_and_Weight Stg_hw
where Stg_hw.person_id = 1620458

【问题讨论】:

    标签: sql sql-server tsql datetime-format sql-server-2017


    【解决方案1】:

    CONVERT(DATETIME, DateFieldColumnName, 103) 可以帮助将这两种格式转换为日期时间。

    示例执行:

    CREATE TABLE TestTable (DateVal VARCHAR (20));
    
    INSERT INTO TestTable (DateVal) VALUES
    ('21-12-2009'), ('05-10-2005'), ('19-03-2018 14:59');
    
    SELECT CONVERT(DATETIME, DateVal, 103) AS Result
    FROM TestTable
    

    请在db<>fiddle找到工作演示

    【讨论】:

    • 可能值得评论一下 SQL Server 不关心分隔符是破折号还是斜杠 +1 的可能令人惊讶的行为。
    • @Doodle 如果答案有助于解决您的问题,您可以投票并accept the answer