我正在使用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)
...
有人可以帮我吗?
谢谢
答案 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而不是日期类型。