【问题标题】:How to convert varchar date into datetime in sql如何在sql中将varchar日期转换为日期时间
【发布时间】:2026-01-03 22:00:01
【问题描述】:

我有这种格式的 varchar 日期:

03/13/2015 : 2130

我想把它转换成这样的日期时间:

2015-03-13 21:30:00.000

我见过这样的例子,但对我正在寻找的东西不起作用

DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))

【问题讨论】:

    标签: sql sql-server tsql datetime varchar


    【解决方案1】:

    OP 想要 mmddyy,而普通的转换将不适用:

    select convert(datetime,'12312009')
    
    Msg 242, Level 16, State 3, Line 1 
    The conversion of a char data type to a datetime data type resulted in 
    an out-of-range datetime value
    

    所以试试这个:

    DECLARE @Date char(8)
    set @Date='12312009'
    SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
    

    输出:


    2009-12-31 00:00:00.000

    (受影响的 1 行)

    【讨论】:

      【解决方案2】:

      假设所有日期时间部分始终用 0 填充,这将起作用。

      DECLARE @Input VARCHAR(50);
      SET @Input = '03/13/2015 : 2130';
      SET @Input = LEFT(@Input, 10) + ' ' + LEFT(RIGHT(@Input, 4), 2) + ':' + RIGHT(RIGHT(@Input, 4), 2);
      
      PRINT @Input;
      PRINT CONVERT(DATETIME, @Input);
      PRINT CONVERT(VARCHAR(50), CONVERT(DATETIME, @Input), 121);
      

      输出:

      2015 年 3 月 13 日 21:30

      2015 年 3 月 13 日晚上 9:30

      2015-03-13 21:30:00.000

      【讨论】:

        【解决方案3】:

        如果转换不适合您,那么您可以使用mid 获取日期、月份、年份等。然后使用str_to_date 以所需格式构造日期时间。

        oracle 中使用 to_date 和这个 * 链接获取 substring

        【讨论】:

        • OP 使用的是 Microsoft SQL Server,所以建议使用 MySQL 函数并没有多大帮助...
        • @Aludra 你的答案当然是对的。不过,显然 OP 需要在特定平台上提供更多指导。
        • 很抱歉错过了这一点,更新了我的答案以包含与 Oracle 相关的选项。
        【解决方案4】:

        Sql函数:

        CONVERT(data_type(length),expression,style)
        

        你可以试试这个:

        CONVERT(datetime,@varCharDate,121)
        

        更多信息请看link

        【讨论】:

        • 问题是输入的 varchar 字符串不是转换可以识别的格式。
        【解决方案5】:

        我想这就是你要找的东西:

        DECLARE @Date VARCHAR(20)
        SET @Date = '03/13/2015 : 2130'
        
        -- Format the date string
        SET @Date = LEFT(@Date, 10) + ' ' + SUBSTRING(@Date, 14, 2) + ':' + SUBSTRING(@Date, 16, 2)
        
        -- convert to date
        Select CONVERT(varchar, CONVERT(DATETIME, @Date), 121)
        

        SQL Fiddle

        More Info

        【讨论】:

          最近更新 更多