首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换日期- "0713“改为”2013年7月“

转换日期- "0713“改为”2013年7月“
EN

Stack Overflow用户
提问于 2014-03-26 19:41:35
回答 2查看 48关注 0票数 0

我在sql server (SSMS)上有一个包含4位代码的列.例如,0713代表2013年7月,0114代表2014年1月。现在我想把前者转换成后者,我想知道什么是最有效的sql查询来进行转换?

谢谢你的建议!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 19:45:57

最有效的方法可能是一个case语句:

代码语言:javascript
复制
select (case left(col, 2)
          when '01' then 'January '
          when '02' then 'Feburary '
          . . .
          when '12' then 'December '
        end) + right(col, 2)

对函数的调用最少。有更简洁的方法可以做到这一点,例如:

代码语言:javascript
复制
select datename(month, cast('2013' + col as datetime)) + right(col, 2)

当然,为了获得最高的效率,您应该在您的环境中设置一个测试,测试大约100万条记录,并实际测试不同的时间。

例如,拥有一个具有366个条目的引用表(每天一个条目)并使用join进行转换可能是最快的。

票数 4
EN

Stack Overflow用户

发布于 2014-03-26 19:55:40

在您的最终格式中,您似乎在值之间徘徊(一月的Jan,而七月的完整月份名称,而不是7月)。在这种情况下,为格式化的月份提供一个查找表,并对其进行查询。

您的FormattedMonth表可以包含MonthName (您想使用的字符串)和MonthNumber (作为int最有效)。

例如:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22671438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档