写法1:case when type ='10' then A else B end price 写法2:case when type =10 then A else B end price MaxCompute中type的类型是varchar(4),写法1的结果是B,写法2的结果是A,为什么会这样? 写法1的 http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=bill_center&i=20230515083110339g0wht7e51gk4&token=NXJSQlBCODhOOFRFUW1QL0tLNXozdEZ0MndZPSxPRFBTX09CTzpwNF8yNzY0MzMyNjAwMjcxODA1MTQsMTY4NjczMTQ3MCx7IlN0YXRlbWVudCI6W3siQWN0aW9uIjpbIm9kcHM6UmVhZCJdLCJFZmZlY3QiOiJBbGxvdyIsIlJlc291cmNlIjpbImFjczpvZHBzOio6cHJvamVjdHMvYmlsbF9jZW50ZXIvaW5zdGFuY2VzLzIwMjMwNTE1MDgzMTEwMzM5ZzB3aHQ3ZTUxZ2s0Il19XSwiVmVyc2lvbiI6IjEifQ==写法2的 http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=bill_center&i=202305150832015gm895fpium1&token=em9XRnpVV3RzOThoMzZYVXRRYmwveVdpUHRFPSxPRFBTX09CTzpwNF8yNzY0MzMyNjAwMjcxODA1MTQsMTY4NjczMTUyMSx7IlN0YXRlbWVudCI6W3siQWN0aW9uIjpbIm9kcHM6UmVhZCJdLCJFZmZlY3QiOiJBbGxvdyIsIlJlc291cmNlIjpbImFjczpvZHBzOio6cHJvamVjdHMvYmlsbF9jZW50ZXIvaW5zdGFuY2VzLzIwMjMwNTE1MDgzMjAxNWdtODk1ZnBpdW0xIl19XSwiVmVyc2lvbiI6IjEifQ== desc bill_center.ods_zipper_cust_hourse_10;的结果
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在MaxCompute中,CASE WHEN表达式的条件判断结果依赖于数据类型和比较规则。以下是针对问题的详细分析和解答:
CASE WHEN type = '10' THEN A ELSE B END priceCASE WHEN type = 10 THEN A ELSE B END pricetype字段的数据类型为VARCHAR(4)。B,写法2的结果是A。CASE WHEN type = '10' THEN A ELSE B END pricetype = '10'的比较中,'10'是一个字符串(VARCHAR类型)。type字段本身是VARCHAR(4),因此type与'10'的比较是字符串比较。type的值必须完全等于'10'(包括长度和内容),才会返回TRUE。type的实际值是'10 '(末尾有空格)或其他不符合严格匹配的情况,则条件type = '10'为FALSE,最终返回ELSE分支的值B。CASE WHEN type = 10 THEN A ELSE B END pricetype = 10的比较中,10是一个整数(INT类型)。VARCHAR类型的type字段隐式转换为INT类型。type的值可以被解析为一个有效的整数(例如'10'),则转换成功,比较结果为TRUE。type的值无法被解析为整数(例如'10 '或非数字字符),则转换失败,可能会导致异常或默认行为。type的值为'10',它能够成功转换为整数10,因此条件type = 10为TRUE,最终返回THEN分支的值A。type与'10'是字符串比较,要求严格匹配。type与10是数值比较,涉及隐式类型转换。VARCHAR字段与数值类型进行比较时,MaxCompute会尝试将VARCHAR转换为数值类型。如果转换失败,可能会导致意外结果或错误。CAST函数显式转换数据类型。例如:CASE WHEN CAST(type AS INT) = 10 THEN A ELSE B END price
或者:
CASE WHEN type = CAST(10 AS VARCHAR(4)) THEN A ELSE B END price
B,因为type与'10'是字符串比较,未满足严格匹配条件。A,因为type与10是数值比较,type被隐式转换为整数后满足条件。MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。