【问题标题】:Convert Datetime string to date in SQL Server在 SQL Server 中将日期时间字符串转换为日期
【发布时间】:2019-08-31 12:29:24
【问题描述】:

我有一个像这样来自 C# 的日期时间数据

2019-03-20T11:25:32.0342949

我尝试使用 cast 将其转换为日期时间,但它会触发错误

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

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

我猜是因为字符串中的T

我也尝试了格式,这当然不起作用,因为它没有将其识别为日期。

那么我怎样才能正确地将它转换为日期。没有一些子字符串方法来提取日期部分。

【问题讨论】:

  • 使用了哪个 SQL 版本?
  • 你是如何将日期从 C# 传递给 SQL 的
  • 错过提及.. SQL 2012
  • @peeyushsingh 作为字符串
  • 从 c# 向 SQL Server 发送日期时,不要发送字符串,而是发送 DateTime 结构的实例。这样你就不必搞乱日期时间的转换和字符串表示了。

标签: c# tsql sql-server-2012


【解决方案1】:

你必须使用DATETIME2 而不是DATETIME

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

demo on dbfiddle.uk

问题在于字符串值的毫秒部分的精度。您在毫秒部分使用了七位数字,这在 DATETIME 上是不可能的。所以你可以做两件事:

  • 将毫秒部分缩短为三位数并使用DATETIME
  • 使用DATETIME2 获得更高的精度

timedatedatetime2datetimeoffset 数据类型用于新工作。这些类型符合 SQL 标准。它们更便携。 timedatetime2datetimeoffset 提供更高的秒精度。 datetimeoffset 为全球部署的应用程序提供时区支持。
来源: https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime-transact-sql

StackOverflow 上还有DATETIMEDATETIME2 的比较:
DateTime2 vs DateTime in SQL Server

【讨论】:

    【解决方案2】:

    如果您只需要日期,这将起作用

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

    如果您需要日期和时间,这将起作用

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

    在 Sql 15 中尝试过它的工作

    【讨论】:

      【解决方案3】:

      您必须利用 CONVERT() 方法。例如SELECT CONVERT(date, getdate()),其中date 是您刚才提到的字符串。在您的情况下,您的 datetime 字符串占用 10 个字符串字母,因此您也可以使用 SELECT CONVERT(VARCHAR(10), GETDATE(), 103)。第三个参数是你要转换成的datetime样式。

      【讨论】:

        【解决方案4】:

        您不应该将日期时间作为 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...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-26
          • 1970-01-01
          • 2019-04-12
          • 1970-01-01
          相关资源
          最近更新 更多