2014-03-26 93 views
0

我有一个包含4位代码的列的sql server(SSMS)表。说0713代表2013年7月,而0114代表2014年1月。现在我想将前者转换为后者,我不知道什么是最有效的SQL查询转换?转换日期 - “0713”到“2013年7月”

感谢您的任何建议!

+0

什么数据库引擎? (MySQL,SQL Server,Oracle等) – EkoostikMartin

+0

这是MS SQL Server – user3344443

+0

这是2005年。以下答案是伟大的!感谢帮助。 – user3344443

回答

4

可能是最有效的方式是case声明:

select (case left(col, 2) 
      when '01' then 'January ' 
      when '02' then 'Feburary ' 
      . . . 
      when '12' then 'December ' 
     end) + right(col, 2) 

这样做的调用最少要功能。还有更简洁的方式来做到这一点,如:

select datename(month, cast('2013' + col as datetime)) + right(col, 2) 

当然,要获得最有效的,你应该建立一个测试,你对某事象100万条记录的环境和实际测试了不同的时序。

例如,它可能是最快速的拥有366个条目的参考表,每天一个,并使用join进行转换。

+0

非常感谢!这很好用! – user3344443

+0

我没有'日期'类型在sql2005中,我改变为日期时间,并运作良好! – user3344443

0

在您的最终格式上,它看起来像是在值之间摇摆(1月份为1月份,而7月份为全月份名称,而不是7月份)。在这种情况下,格式化月份的查找表格以及对它的查询。

你FormattedMonth表可以包含MONTHNAME和MonthNumber(这将是最有效的作为int)

为例(您想使用的字符串):

SELECT originaldates.identifier, FormattedMonth.MonthName + ' 20' + originaldates.year 
FROM (Select identifier, left(shortdate,2) as month, right(shortdate,2) as year 
     from Tablecontainingfield) originaldates 
JOIN FormattedMonth 
ON cast(FormattedMonth.MonthNumber as int) = originaldates.month 
+0

我会对下面的案例进行比较,但它应该更有效率。 – Doryllis

相关问题