带有聚合和like子句的case语句 - MSSQL 2012

时间:2013-08-28 12:44:08

标签: sql sql-server tsql

我真的在MSSQL 2012中遇到一个案例陈述。我已经四处寻找其他答案了,但是虽然我得到了一些帮助,但似乎没有人解决这个问题。

case firstname
    when len(ltrim(rtrim(firstname))) > 11 then 'blah'
    else 'blahblah'
end as test

我在'>'上收到语法错误字符。

最初,这是

case firstname
    when ltrim(rtrim(firstname)) like '% %' then 'blah'
    else 'blahblah'
end as test

但我认为关键字关键字可能有一些敏感度,所以我将其更改为“>”,但我得到了相同的内容。

可能是一个愚蠢的问题,但我已经敲了几个小时,我会非常感激一些见解。

3 个答案:

答案 0 :(得分:2)

试试这个版本:

(case when len(ltrim(rtrim(firstname))) > 11 then 'blah'
      else 'blahblah'
 end) as test

case语句有两个版本。带变量的那个用于常量表达式:

(case firstname
      when 'Arnold' then . . .
      when 'Betty' then . . .
 end)

第二个版本(实际上是我唯一使用的版本)为每个部分采用条件:

(case when firstname = 'Arnold' then . . .

答案 1 :(得分:0)

将其更改为

case 
    when len(ltrim(rtrim(firstname))) > 11 then 'blah'
    else 'blahblah'
end as test

答案 2 :(得分:0)

你混淆了CASE expressions的两种形式。

一个简单的case表达式检查每个WHEN子句是否与CASE之后和第一个WHEN之前的表达式相等。

搜索的案例表达式检查每个WHEN子句中的单独任意谓词,并且在CASE和第一个WHEN之间没有表达式。

尝试:

case
    when len(ltrim(rtrim(firstname))) > 11 then 'blah'
    else 'blahblah'
end as test