【问题标题】:Converting varchar(50) to datetime data type in SQL Server在 SQL Server 中将 varchar(50) 转换为 datetime 数据类型
【发布时间】:2015-05-10 05:12:49
【问题描述】:

我正在尝试在 SQL Server 中将 varchar(50) 字段更新为日期时间,尝试了多种方法但均未成功。

我会出错

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

这是 OrderDateTime 列中的示例值:

2014-05-21 04:21:45.3346898
2014-02-26 08:43:58.5693805
2014-04-29 15:57:21.0778236
2014-04-09 07:23:57.3886545
2014-03-14 16:03:46.3919145
:::::::::::::::::::::::::::

请帮助我确定导致问题的行,或者让我知道是否有任何强制转换为日期时间方式可用。

我试过这些:

UPDATE  Orders SET OrderDateTime=CONVERT(datetime, OrderDateTime)
UPDATE  Orders SET OrderDateTime=CAST(OrderDateTime AS datetime)

【问题讨论】:

  • 这不是和-stackoverflow.com/questions/1509977/…一样吗??
  • 你检查过我的回答吗?如果您还有问题,请告诉我
  • 我认为@Arunprasanth KV 的回答应该有效!也是。

标签: sql-server sql-server-2008 sqldatatypes


【解决方案1】:

试试这个...

ODBC canonical (with milliseconds).
------------------------------------

SELECT CONVERT(DATETIME, '2013-05-04 14:14:35.073', 21)

SELECT CONVERT(DATETIME, '2013-05-04 14:14:35.073', 121)

ISO8601.
--------
SELECT CONVERT(DATETIME, '2013-05-04T14:14:35.073', 126) -- 2013-05-04 14:14:35.073 

SELECT CONVERT(VARCHAR, GETDATE(), 127) -- 2013-05-04T14:14:35.073
SELECT CONVERT(DATETIME, '2013-05-04T14:14:35.073', 127) -- 2013-05-04 14:14:35.073

参考网址: http://www.codeproject.com/Articles/576178/cast-convert-format-try-parse-date-and-time-sql#2_3

【讨论】:

    【解决方案2】:

    试试这个

    UPDATE  Orders SET OrderDateTime=CAST(OrderDateTime AS datetime2)
    

    注意:如果您使用的是SQL Server 2008 或更新版本,您可以使用DATETIME2 数据类型而不是普通的DATETIME

    datetime2 可以被认为是现有 datetime 类型的扩展,具有更大的日期范围、更大的默认小数精度和可选的用户指定精度。

    【讨论】:

    • 太棒了.. 工作,但不确定如果我使用 datetime2 我的应用程序会抱怨,请告诉我您的经验?
    • @AVatsa 你可以用那个,看看更新的答案,它只是 datetime 的扩展
    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多