如何将此 varchar 转换为日期时间格式?

Yog*_*ogi 0 sql-server t-sql type-conversion

我有一个 varchar 列有像 (2015-12-02 20:40:37.8130000) 这样的数据,我已经从 csv 文件导入到 SQL 表。我需要将此列转换为数据时间 (2013-03-17 14:15:49.687)。

 ALTER TABLE track_date alter column start_time datetime.
Run Code Online (Sandbox Code Playgroud)

得到错误为:

从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。

使用 convert 函数进行转换时,得到相同的错误:

SELECT convert(datetime,start_time,5) from track_date 
Run Code Online (Sandbox Code Playgroud)

从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。

你能帮忙吗,如何将此 varchar 数据转换为日期时间格式?

Bob*_*mes 7

varchar 中的精度太高,无法转换为日期时间。

一种选择(在我看来更好)是将目标列更改为 datetime2(7)。然后你可以像这样转换:

declare @dt varchar(50)
set @dt = '2015-12-02 20:40:37.8130000'

select cast(@dt as datetime2(7));
Run Code Online (Sandbox Code Playgroud)

如果更改列不是一个选项,您可以像这样进行转换:

declare @dt varchar(50)
set @dt = '2015-12-02 20:40:37.8130000'

select cast(cast(@dt as datetime2(7))as datetime)
Run Code Online (Sandbox Code Playgroud)


Duf*_*ffy 5

DATETIME 只允许三位毫秒精度。您需要修剪前三毫秒之后的尾随位置,或者如果您使用的是任何版本的 SQL Server 2008 或更高版本,则可以使用 DATETIME2。

DATETIME2 允许最多七位毫秒精度,并且可以为您的表或查询显式设置精度级别。可以在datetime2 (Transact-SQL) 中找到更多详细信息和差异

您可以通过执行以下 CAST 查询来验证:

SELECT CAST('2015-12-02 20:40:37.8130000' AS DATETIME2)
Run Code Online (Sandbox Code Playgroud)