在SQL Server中将varchar(50)转换为datetime数据类型

时间:2015-03-09 04:40:09

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

我正在尝试在SQL Server中将varchar(50)字段更新为datetime,尝试了几种但没有成功。

我的方式得到错误

  

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

以下是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)

2 个答案:

答案 0 :(得分:1)

试试这个

UPDATE  Orders SET OrderDateTime=CAST(OrderDateTime AS datetime2)

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

  

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

答案 1 :(得分:0)

试试这个......

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