使用正确的世纪将两位数年份更改为4位数年份(不允许修改两年截止日期选项)

时间:2015-06-25 21:01:49

标签: sql sql-server-2012 date-conversion

我试图对此进行一些研究,但没有太多运气。

我有一个日期(MMDDYY格式)存储在varchar字段(DateValue)中的表中,该表看起来与此类似:

表A

----------------------------------------------- -------------------------------------------------- -------

----------------------                                  
|| ID  |  DateValue ||
  -----  -----------    
|| 1   |  011212    ||
|| 2   |  011549    ||
|| 3   |  070860    ||

----------------------------------------------- -------------------------------------------------- -------

我正在尝试将另一列ConvertDateValue添加到同一个表中,该表将是date字段。此列中的值将以此格式(YYYY-MM-DD)从DateValue字段转换为值。这是我尝试过的:

--declare table variable
declare @tableA table (ID int, DateValue varchar(50))

--insert sample values into table variable
insert into @tableA VALUES 
(1,'011212'),
(2,'011549'),
(3,'070860')

begin
select ID,
       DateValue,
       CAST(STUFF(STUFF(DateValue, 3, 0, '-'), 6, 0, '-') as date) as ConvertDateValue 
 from @tableA 
end

输出:

|| ID  |  DateValue ||  ConvertedDateValue ||
  -----  -----------    ------------------
|| 1   |  011212    ||   2012-01-12        ||
|| 2   |  011549    ||   2049-01-15        ||
|| 3   |  070860    ||   1960-07-08        ||

预期输出:

|| ID  |  DateValue ||  ConvertedDateValue ||
  -----  -----------    ------------------
|| 1   |  011212    ||   2012-01-12        ||
|| 2   |  011549    ||   2049-01-15        ||
|| 3   |  070860    ||   2060-07-08        ||  --Here is the difference 

我需要确保ConvertedDateValue显示正确的世纪。对于某些数据,上述值也可能是1960-07-08,而对于其他数据则不是。

  

仅供参考,我知道两年截止日期选项,我们有默认值   设定的值,即年2049。不幸的是,由于各种原因,我不允许更改任何高级选项设置。

我愿意接受反馈,有什么替代方案吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

这非常棒,这是解决它的子字符串:

select convert(date, cast(substring(DateValue,1,2) + '/' +  substring(DateValue,3,2) + '/20' + substring(DateValue,5,2) as datetime), 101 ) as converteddate

转换并不是填充数据库所必需的,但它是您要求的格式。

答案 1 :(得分:0)

只需手动解析日期并使用CASE语句来确定世纪。如果你想要' 070860'有时候是2060-07-08,有时候是1960-07-08那么除了两位数的年份你还有什么逻辑可以确定世纪呢?

|| ID  |  DateValue ||  ConvertedDateValue ||
  -----  -----------    ------------------
|| 1   |  011212    ||   2012-01-12        ||
|| 2   |  011549    ||   2049-01-15        ||
|| 3   |  070860    ||   2060-07-08        ||

输出

cd
gem install bundler