我在 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
类型?
答案 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