将日期 - “0713”转换为“2013年7月”

时间:2014-03-26 19:41:35

标签: sql sql-server sql-server-2005

我在sql server(SSMS)上有一个表,其中包含一个包含4位代码的列。假设0713代表2013年7月,而0114代表2014年1月。现在我想将前者转换为后者,我想知道什么是最有效的sql查询转换?

感谢您的任何建议!

2 个答案:

答案 0 :(得分: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进行转换。

答案 1 :(得分:0)

在你的最终格式中,你看起来在价值观之间摇摆不定(1月的Jan,但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