【问题标题】:CAST() not changing to datetime formatCAST() 未更改为日期时间格式
【发布时间】:2018-02-28 15:53:44
【问题描述】:

我正在使用此 SQL 查询将 _Submission_date 类型的 nvarchar(max) 列转换为 datetime 格式:

SELECT
    CAST(PSCData._SUBMISSION_DATE AS DATETIME2)
FROM 
    PSCData

我已经尝试了所有可能的方法,但仍然出现此错误:

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

_Submission_Date里面的数据是这样的:

"2017-8-21 21:13:55.00000"
"2017-9-21 14:13:55.00000"

当我运行这个查询时,它工作正常:

SELECT CAST('2017-08-25' AS DATETIME);

但使用这种格式:

SELECT CAST('2017-9-21 14:13:55.00000' AS DATETIME);

我得到了上面提到的同样的错误。

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 你显然有一些值不是有效的 datetime2 字符串。
  • 是的,数据是这种格式“2017-8-21 21:13:55.00000”我发现最终的.00000是问题的实际原因。你能告诉我什么在这种情况下怎么办?
  • 我也编辑了问题
  • 我现在在您的示例中看到您正在使用datetime 测试的查询,而不是datetime2。这是一个区别,因为您的示例可以与 datetime2 一起工作(试一试)。这可能是导致问题的另一个值。 SELECT CAST('2017-8-21 21:13:55.00000' AS DATETIME2) 工作正常,您的值与@SadiaRashid 所述的值不符。
  • 在这两种情况下都会出现错误并不重要。正如我所说的,主要问题是最后的“.00000”。我已经确定了

标签: asp.net sql-server linq datetime casting


【解决方案1】:

找到了解决办法。实际问题是导致错误的字符串周围的双引号,可以这样解决:

update PscData
SET _SUBMISSION_DATE = REPLACE(_SUBMISSION_DATE,'"', '')

select CAST(PSCData._SUBMISSION_DATE as DATETIME2)
FROM PSCData

即:首先使用 REPLACE 方法删除字符串周围的双引号,而不是使用 cast 方法,并且可以轻松地将“varchar”类型的数据转换为“datetime”格式而没有任何问题。另外,您必须在 cast 方法中使用“datetime2”,因为“datetime”不适用于它。 谢谢你的帮助顺便说一句:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2020-08-23
    • 2013-06-29
    • 2017-05-13
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多