SQL中的空值、NULL以及类型转换那些坑

本文探讨了SQL中空值和NULL值的处理,特别是在非关系型数据库中,强调了在不同SQL引擎中如何判断空值和NULL。同时,详细介绍了字段类型转换的隐式和显式转换,以及在不同SQL方言中类型转换的注意事项。通过对Hive、Presto、Spark、Impala和MySQL的示例,帮助读者理解如何正确处理NULL值和进行类型转换。
摘要由CSDN通过智能技术生成

我们平常写SQL中遇到过滤空值或者NULL值的处理,尤其是在非关系型数据库中没有唯一键和默认值的约束要求,很容易出现NULL值或者空值。很多时候我们总是会出现困扰,到底是该使用=' ' 还是用 is NULL呢?

另外我们一个多表JOIN的查询在这个SQL上跑的好好的,一旦换了一个SQL执行引擎就提示我们JOIN两边的数据类型不一致,这些都是为什么呢?

 

今天就带大家一起领略一下各类SQL中空值以及类型转换那些坑。

 

空值和NULL值

 

一、底层字段类型为字符型(string,varchar,char):

hive:如果底层存储的是NULL值,我们必须要用 is NULL来判断,如果底层存储的是' ',则需要使用 =' '来判断。在hive中NULL默认存储为'\N',' '存储还是' '。

presto:与hive保持一致。

spark:与hive保持一致。

impala:与hive保持一致。

mysql:使用上与hive使用保持一致。

 

二、底层字段是(int,bigint)

hive:由于int类型的数据在hive中默认存储为'\N',所以查询的时候必须要使用is NULL才能取出空的值。

presto:与hive中保持一致,不能使用='',会报类型错误。

spark:与hive中保持一致。

impala:与presto保持一致,只能使用is NULL,使用=''由于后面是字符类型,会报错。

mysql:与presto保持一致&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值