我在sql server (SSMS)上有一个包含4位代码的列.例如,0713代表2013年7月,0114代表2014年1月。现在我想把前者转换成后者,我想知道什么是最有效的sql查询来进行转换?
谢谢你的建议!
发布于 2014-03-26 19:45:57
最有效的方法可能是一个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进行转换可能是最快的。
发布于 2014-03-26 19:55:40
在您的最终格式中,您似乎在值之间徘徊(一月的Jan,而七月的完整月份名称,而不是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.monthhttps://stackoverflow.com/questions/22671438
复制相似问题