首页 > 解决方案 > 在 SQL Server 2008 中将 varchar 转换为 datetime(127)

问题描述

我有一个有 2 列的表:endReportDate (varchar),reportType (varchar)

endReportDate(varchar), reportType(varchar)
-------------------------------------------    
2018-10-09T16:01Z         FEDEX

我需要以“2018-08-07T16:01:30”格式选择此数据。

我正在尝试这样:

select convert(Datetime, endDateReport, 127) from table

但我收到此错误:

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

如何解决?

标签: sql-serversql-server-2008

解决方案


这里的问题是您存储的日期和时间值是varchar. 始终将您的数据存储在代表它的数据类型中;varchar不是“一刀切”的数据类型。

因此,最好的解决方案是修复您的设计。假设您的所有数据都具有格式yyyy-MM-ddThh:mmZ,那么您可以执行以下操作:

--UPDATE values to be a valid datetime String
UPDATE YourTable
SET endReportDate = REPLACE(endReportDate,'Z','') + ':00';
GO
--Chnage the data type
ALTER TABLE YourTable ALTER COLUMN endReportDate datetime2(0);
GO

推荐阅读