无法将varchar列更改为日期类型

时间:2019-06-01 21:09:36

标签: sql-server tsql

我在 SQL Server 2017 数据库中有一个表,该表包含一个varchar(10)列,其值均完全符合date。这是一些示例值,但还有更多示例:

2014-06-30
2004-05-06
2014-06-30
2001-08-18
2004-05-06
2009-06-30
2001-08-18
2004-05-06
2009-06-30
2001-08-18
2004-05-06

我正在尝试将此列转换为date

alter table SourceTable1 alter column END_DATE date;

...但是我总是会收到此错误:

  

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

我已经检查了数据,并且100%的列值符合date类型。如何将列更改为date类型?

2 个答案:

答案 0 :(得分:1)

我做了一个简单的测试,就可以了:

create table #t (t varchar(10))
insert into #t values ('2001-08-18')

alter table #t alter column t date

另一个带有类似日期但又不是的日期(与您获得相同的error):

create table #tt (t varchar(10))
insert into #tt values ('2001-08-32')

alter table #tt alter column t date

请确保您有一行包含不可转换的varchar(10)。您可以使用以下选择来找到这些值:

select try_cast(yourColumn as date) as tryCastyourColumn,  yourColumn
from Yourtable
where try_cast(yourColumn as date) is null

答案 1 :(得分:0)

我同意M. Kanarkowski的观点,您的示例看起来不错,但是您可能缺少一些东西。既然您拥有2017年的版本,请运行以下命令检查问题所在:

select END_DATE
from SourceTable1 
where END_DATE is not null and try_convert(date,END_DATE) is null