我在sql server(SSMS)上有一个表,其中包含一个包含4位代码的列。假设0713代表2013年7月,而0114代表2014年1月。现在我想将前者转换为后者,我想知道什么是最有效的sql查询转换?
感谢您的任何建议!
答案 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