仅将月份和年份日期插入SQL表

时间:2012-10-05 22:36:38

标签: sql sql-server sql-server-2008

我正在使用MS SQLServer并尝试将月/年组合插入到这样的表中:

INSERT INTO MyTable VALUES (1111, 'item_name', '9/1998')

显然,上面的命令无法工作,因为

Conversion failed when converting date and/or time from character string.

因为9/1998格式不正确。我想解决这个问题,表格的这一列将显示如下内容:

9/1998
12/1998
(other records with month/year format) 
...

有人可以帮我吗?

谢谢

6 个答案:

答案 0 :(得分:3)

SQL Server仅支持完整日期(日,月和年)或日期时间,因为您可以在MSDN数据类型列表中看到:http://msdn.microsoft.com/en-us/library/ff848733(v=sql.105).aspx

您可以将日期值与假日一起使用或将值存储为字符串,但不存在只存储月/年对的本机类型。

答案 1 :(得分:1)

我发现这是一篇旧帖子,但我最近的测试确认存储日期或将年份和月份拆分为两列(年份 smallint ,月份 tinyint )会导致整体大小相同。 当您实际需要将日期解析为所需的过滤器(年/月)时,差异将会显示。

请告诉我您对此解决方案的看法! :)

亲切的问候

答案 2 :(得分:0)

你可以在当天使用“01”:

INSERT INTO MyTable VALUES (1111, 'item_name', '19980901')

答案 3 :(得分:0)

你可以:

1)将列类型更改为varchar

2)获取提供的值并将其转换为sql server在插入之前将接受的正确格式,并将其格式化回“M / YYYY”。提取数据时的格式:SELECT MONTH([myDate]) + '/' + YEAR([myDate]) ...

答案 4 :(得分:0)

您可能需要考虑对数据的用途。目前,您只关心捕获和显示数据。但是,在未来,您可能需要对其执行日期计算(即,比较两个记录之间的差异)。正因为如此,并且由于你大约有三分之二的路径,你也可以将这个字段转换为Date类型。然后可以委派您的表示层,其任务是将其恰当地显示为“MM / yyyy”,这是一种可用于您可能正在使用的任何编程语言或报告平台的功能。

答案 5 :(得分:0)

如果要使用日期类型,则应格式化值:

declare @a date
SELECT @a='2000-01-01'
select RIGHT( convert (varchar , @a, 103), 7) AS 'mm/yyyy'

如果你想像SELECT * FROM那样进行查询... 你应该使用varchar而不是日期类型。