Sql 转换日期-“转换日期”;0713“;至;2013年7月“;
我在sql server(SSMS)上有一个表,其中有一列包含4位代码。0713代表2013年7月,0114代表2014年1月。现在我想将前者转换为后者,我想知道转换最有效的sql查询是什么Sql 转换日期-“转换日期”;0713“;至;2013年7月“;,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我在sql server(SSMS)上有一个表,其中有一列包含4位代码。0713代表2013年7月,0114代表2014年1月。现在我想将前者转换为后者,我想知道转换最有效的sql查询是什么 谢谢你的建议 最有效的方法可能是使用案例语句: select (case left(col, 2) when '01' then 'January ' when '02' then 'Feburary ' . . . when
谢谢你的建议 最有效的方法可能是使用
案例
语句:
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
进行转换。最有效的方法可能是使用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
进行转换。在最终格式上,您似乎在值之间摇摆不定(一月表示一月,但完整的月份名称表示七月,而不是七月)。在这种情况下,将为格式化月份创建一个查找表并对其进行查询
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
在最终格式中,看起来您在值之间摇摆不定(一月表示一月,但完整的月份名称表示七月,而不是七月)。在这种情况下,将为格式化月份创建一个查找表并对其进行查询 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
什么数据库引擎?(MySQL、SQL Server、Oracle等)现在是2005年。下面的答案很好!谢谢你的帮助。什么数据库引擎?(MySQL、SQL Server、Oracle等)现在是2005年。下面的答案很好!谢谢您的帮助。我会与下面的case语句进行比较,但效率应该更高。我会与下面的case语句进行比较,但效率应该更高。我在sql2005中没有“date”类型,我改为datetime,效果很好!我在sql2005中没有“日期”类型,我改为datetime,效果很好!