写法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 price
CASE WHEN type = 10 THEN A ELSE B END price
type
字段的数据类型为VARCHAR(4)
。B
,写法2的结果是A
。CASE WHEN type = '10' THEN A ELSE B END price
type = '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 price
type = 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架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。