本文为您介绍如何使用实时计算条件函数CASE WHEN。

语法

CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END

入参

参数 数据类型
a BOOLEAN
b BOOLEAN
c BOOLEAN
d BOOLEAN
e BOOLEAN

功能描述

如果a为TRUE,则返回b。如果a为FALSE,c为TRUE,则返回d。如果a,c都为FALSE,则返回e。

示例

说明
CASE WHEN返回常量字符串的时候,会在字符串后面补全空格。如下面的例子,当满足else条件的时候返回值是 ‘ios ‘, 后面会多几个空格。
case when device_type = 'android' 
then 'android' 
else 'ios'
end as os

两种解决方法:

  • 利用TRIM函数,去除空格。对这个例子来说,在用到os字段的地方,用TRIM(os)
  • 利用CAST将常量字符串转为VARCHAR类型。
  • 测试数据
    device_type(VARCHAR)
    android
    ios
    win
  • 测试语句一(解决方法1:利用TRIM函数)
    SELECT 
       trim(os), -- 这里加了trim 
       CHAR_LENGTH(trim(os)) -- 这里加了trim
    from(
       SELECT
         case when device_type = 'android'
         then 'android'
         else 'ios' 
    end as os 
    FROM T1
    );
    测试语句二(解决方法2:利用CAST函数)
    SELECT
     os, 
    CHAR_LENGTH(os) 
    from
    (SELECT 
     case when device_type = 'android'
     then cast('android' as varchar) -- 这里加了cast 
     else cast('ios' as varchar) -- 这里加了cast 
    end as os 
    FROM T1
    );
  • 测试结果
    os(VARCHAR) length(INT)
    android 7
    ios 3
    ios 3