正在尝试将日期格式从(DD-MM-YYYY)更新为(MM-YYYY)SQL

正在尝试将日期格式从(DD-MM-YYYY)更新为(MM-YYYY)SQL,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试将我的日期列(例如2012-04-20格式)更新为mm yyyy。我搜索了通过转换为varchar可以实现的解决方案,但是它给了我一个错误 Msg 241,16级,状态1,第4行 从字符串转换日期和/或时间时,转换失败 这就是我正在执行的代码 UPDATE dbo.DimDate SET FullDateAlternateKey = RIGHT(CONVERT(varchar(10), GETDATE(), 105), 7) 你知道怎么解决这个问题吗 编辑: 问题不仅在于显示,而且

我正在尝试将我的日期列(例如2012-04-20格式)更新为mm yyyy。我搜索了通过转换为varchar可以实现的解决方案,但是它给了我一个错误

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

这就是我正在执行的代码

UPDATE dbo.DimDate 
SET FullDateAlternateKey = RIGHT(CONVERT(varchar(10), GETDATE(), 105), 7)
你知道怎么解决这个问题吗

编辑:


问题不仅在于显示,而且在于将列的格式更新为MM-YYYY

我会将其保留为日期,并使用格式获取所需的内容。例如:

SELECT FORMAT (your_date, 'MM/yyyy') as date FROM dbo.your_table
我正在尝试将我的日期列(例如2012-04-20格式)更新为mm yyyy

你不能这样做。日期是使用内部格式存储的,您无法控制该格式。您可以控制的是数据作为字符串显示时的显示方式

执行所需操作的一种方法是使用计算列:

ALTER TABLE dbo.DimDate ADD FullDateAlternateKey_mmyyyy AS
    (FORMAT(FullDateAlternateKey, 'MM/yyyy'));

然后,您可以引用FullDateAlternateKey_mmyyyy,并且它始终以您想要的格式将日期值作为字符串。

看起来像是一个显示问题而不是存储问题。简单的方法是在需要显示日期和时间数据类型没有格式的任何位置放弃日期值。格式是在表示层而不是RDBMS中确定的。至于错误,它告诉您问题所在,像“05-2021”这样的值不是有效的日期和时间值;日期有一天。这能回答你的问题吗?我知道这不是一个确切的欺骗,但它基于相同的基本误解,而被欺骗目标的公认答案很好地解释了这一点。