Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 转换日期-“转换日期”;0713“;至;2013年7月“;_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 转换日期-“转换日期”;0713“;至;2013年7月“;

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

我在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 '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,效果很好!