代码之家  ›  专栏  ›  技术社区  ›  Sandeep Thomas

在SQL Server中将日期时间字符串转换为日期

  •  -1
  • Sandeep Thomas  · 技术社区  · 7 年前

    我有一个C的日期时间数据

    2019-03-20T11:25:32.0342949
    

    我尝试使用cast将其转换为datetime,它会触发错误

    select cast('2019-03-20T11:25:32.0342949' as date)
    

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

    T 在字符串中。

    我也尝试了格式化,当然不起作用,因为它不能确定它是日期。

    4 回复  |  直到 7 年前
        1
  •  1
  •   Tony Tom    7 年前

    如果你只需要日期这将工作

    select cast('2019-03-20T11:25:32.0342949' as date) As DATE
    

    select cast('2019-03-20T11:25:32.0342949' as datetime2) As DATE
    

    在sql15中尝试了它的工作原理

    enter image description here

        2
  •  2
  •   Sebastian Brosch Navjyot    7 年前

    你必须使用 DATETIME2 而不是 DATETIME :

    SELECT CAST('2019-03-20T11:25:32.0342949' AS DATETIME2) -- 2019-03-20 11:25:32.0342949
    

    demo on dbfiddle.uk

    日期时间 . 所以你可以做两件事:

    • 将毫秒部分缩短为三位数并使用
    • 使用 日期时间2 为了更精确

    time , date , datetime2 datetimeoffset 时间 提供更多秒精度。 为全球部署的应用程序提供时区支持。
    资料来源: https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime-transact-sql

    两者之间也有比较 堆栈溢出时:
    DateTime2 vs DateTime in SQL Server

        3
  •  1
  •   Max Voisard    7 年前

    必须利用CONVERT()方法。例如, SELECT CONVERT(date, getdate()) date datetime SELECT CONVERT(VARCHAR(10), GETDATE(), 103) . 第三个参数是 日期时间

        4
  •  0
  •   peeyush singh    7 年前

    不应将datetime作为字符串从C#传递,这是传递的正确方法:

    string sql = "SELECT * FROM table WHERE datevalue= @date";
    
    SqlParameter dateParam = new SqlParameter("@date", SqlDbType.DateTime);
    dateParam .Value = dateValue;
    
    SqlCommand command = new SqlCommand(sql);
    command.Parameters.AddWithValue("@date", dateParam );
    // then execute the command...