2014-11-03 116 views
2

我正在尝试编写一个查询,它将输出为MONTH,YEAR。SQL语句中的case语句给出错误

当我写:

select CAST(tbl.MONTH as varchar(2)) + ', ' + CAST (tbl.YEAR as varchar(4)) as [DATE] 
from TABLE as tbl 

我得到的输出

1,2014 
    4,2014 (depending upon the input) 

但是,现在,我想与DEC

因此,与4月12日更换1 JAN,4 ,我试图写一个案例陈述为:

SELECT 
    case when tbl.MONTH ='1' 
    then ('JAN' + ', ' + CAST (tbl.YEAR as varchar(4))) as [DATE1] 
from TABLE as tbl 

,这给出了语法错误。 谁能告诉我,我应该做什么?

+0

基于方括号的使用,我删除了MySQL标记。 – 2014-11-03 16:06:49

回答

6

case需要一个end

SELECT (case when tbl.MONTH = '1' then 'JAN' + ', ' + CAST(tbl.YEAR as varchar(4))) 
     end) as [DATE1] 
from TABLE tbl; 

如果值被存储为数字形式,那就不要把周围的恒定值单引号。

1

你缺少end,这是需要关闭case声明:

case 
when tbl.MONTH ='1' 
then ('JAN' + ', ' + CAST (tbl.YEAR as varchar(4))) 
end 
as [DATE1] 
from TABLE as tbl 
1

简单的方法是使用Datename内置功能。没有必要的CASE statement硬编码所有月份

SELECT Datename(mm, tbl.[MONTH]) + ', ' 
     + CONVERT(VARCHAR(10), tbl.YEAR) AS [DATE] 
FROM TABLE AS tbl 

,或者如果您正在使用SQL Server 2012

SELECT Choose(tbl.[MONTH], 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') 
     + ', ' + CONVERT(VARCHAR(10), tbl.YEAR) AS [DATE] 
FROM TABLE AS tbl 
0

类似普拉迪普的答案,但使用来自https://stackoverflow.com/a/188390/405180一个方便的小DATENAME修复和修整第一3个字符:

SELECT UPPER(LEFT(Datename(MONTH , DateAdd(MONTH , tbl.[MONTH] , -1)), 3)) + ', ' + CONVERT(VARCHAR(10), tbl.[YEAR]) AS [DATE] 
FROM TABLE AS tbl 

TBH,我认为从性能的角度来看,你最好使用CASE tbl.[MONTH] WHEN 1 THEN 'JAN' WHEN ...方法。