SQL中使用concat_ws拼接时如何将is_logged字段的0/1转换为Yes/No
目标需求实现方案
核心是先对is_logged的取值做映射转换,再传入拼接函数完成组合,可根据所用SQL引擎选择对应写法:
- 全SQL引擎兼容的通用写法
替换原逻辑中直接拼接is_logged的部分,用CASE WHEN做值映射,完整代码:
转换后输出会从原来的concat_ws( '', month, '-', year, ',Logged-', CASE WHEN is_logged = 1 THEN 'Yes' ELSE 'No' END ) infoDec - 2020,Logged-1变为预期的Dec - 2020,Logged-Yes。 - 支持IF函数的引擎精简写法
适配MySQL、Hive、Spark SQL等带IF语法的引擎,用更简洁的表达式实现值映射,完整代码:concat_ws( '', month, '-', year, ',Logged-', IF(is_logged = 1, 'Yes', 'No') ) info
补充说明:当前代码里
concat_ws的第一个分隔参数为空字符串,效果和concat函数完全一致,会严格按传入顺序拼接所有字段;如果需要利用concat_ws自动跳过空值的特性,可按需修改第一个位置的分隔符参数。
内容的提问来源于stack exchange,提问作者Ira
相关产品推荐
相关产品推荐

