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

语法

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

功能描述

如果表达式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
  • 测试语句
    • 利用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
      );
    • 利用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