我有一个包含4位代码的列的sql server(SSMS)表。说0713代表2013年7月,而0114代表2014年1月。现在我想将前者转换为后者,我不知道什么是最有效的SQL查询转换?转换日期 - “0713”到“2013年7月”
感谢您的任何建议!
我有一个包含4位代码的列的sql server(SSMS)表。说0713代表2013年7月,而0114代表2014年1月。现在我想将前者转换为后者,我不知道什么是最有效的SQL查询转换?转换日期 - “0713”到“2013年7月”
感谢您的任何建议!
可能是最有效的方式是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
进行转换。
非常感谢!这很好用! – user3344443
我没有'日期'类型在sql2005中,我改变为日期时间,并运作良好! – user3344443
在您的最终格式上,它看起来像是在值之间摇摆(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
我会对下面的案例进行比较,但它应该更有效率。 – Doryllis
什么数据库引擎? (MySQL,SQL Server,Oracle等) – EkoostikMartin
这是MS SQL Server – user3344443
这是2005年。以下答案是伟大的!感谢帮助。 – user3344443