T-SQL:将varchar日期列转换为日期类型

kyl*_*lex 5 t-sql date

date在SQL Server数据库中有以下列.

数据类型当前varchar,日期以以下格式存储:2010-04-24

我正在运行以下命令:

ALTER TABLE games ALTER COLUMN date date
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

错误:从字符串转换日期和/或时间时转换失败.

我究竟做错了什么?

mar*_*c_s 7

可能有一些日期不起作用.您使用的是哪个版本的SQL Server?2008我猜想,如果你有DATE数据类型 - 对吗?

我的建议是:

1)创建一个新类型的列 DATE

ALTER TABLE dbo.Games
   ADD NewDate DATE
Run Code Online (Sandbox Code Playgroud)

2)在表上运行更新脚本,查看哪些条目可能无法转换为 DATE

UPDATE dbo.Games
SET NewDate = CAST([date] AS DATE)
WHERE ISDATE([date]) = 1
Run Code Online (Sandbox Code Playgroud)

检查ISDATE() = 1应过滤掉那些无法转换为DATE数据类型的条目.

成功转换所有条目后,您可以随时删除旧[date]列并将新列重命名为[date]- 但是使用类似于DATE列名的保留字并不是真的很聪明 - 我会尝试使用更多内容,更富有表现力的东西(与您所处的问题领域有关).