在数据库处理中数字与字符串之间⽐较的坑(hiveVSmysql)
数字与字符串之间⽐较的坑(hive&mysql )
背景
在⼯作中遇到了同样的SQL在hive和MySQL执⾏后所得总数对不上,但是抽样执⾏都是⼀致的。最后发现问题出在hive和MySQL在数字和字符串⽐较时是不⼀样的。
MySQL
在MySQL中,字符串和数字⽐较是⾃动转化为数字,如果开头没有数字就转化为0:
1. 字符串(数值)与数值⽐较 ,与数值⽐较没有差别:
程序员修炼之道第二版mysql>select'5'>4;
+-------+
|'5'>4|
+-------+
|1|
+-------+
1row in set
mysql>select'5'>04;
+--------+
|'5'>04|
+--------+
|1|
+--------+
1row in set
2. 字符串(数值+字符串)与数值⽐较 ,从左到右转换为数值进⾏⽐较,转换不了即为0:
android向服务器提交数据
|1|
+---------+
1row in set
mysql>select'abc1'>0;
+----------+
|'abc1'>0|
+----------+
|0|
+----------+
1row in set
mysql>select'1abc'>0;
+----------+
|'1abc'>0|
regions怎么读+----------+
|1|
+----------+
1row in set
mysql>select'01abc'>0;mysql菜鸟教程字符串型
+-----------+
|'01abc'>0|
+-----------+
|1|
+-----------+
1row in set
3. 字符串(数值)与字符串(数值)⽐较 ,从左到右按位⽐较:
|1|
+---------+
1row in set
mysql>select'05'>'4';
+----------+
|'05'>'4'|
+----------+
|0|
+----------+
1row in set
tease
mysql>select'a05'>'4';
+----------+
|'a05'>'4'|
+----------+
|1|
+----------+
1row in set
mysql>select'05a'>'4';
+-----------+
|'05a'>'4'|
+-----------+
|0|
+-----------+
1row in set
hive
因⼯作需要在hive中⼤家往往会将数值转换为string,在hive中,字符串和数字⽐较是⾃动转化为数字,但如果是“数字+字符”和数值⽐较的话,hive是⽆法转换的,会为空(null),注意不是0:
其他规则跟MySQL⼀样。
除此之外,对于⽇期型的⽐较,相当于字符⽐字符。
mysql>select'2019-10-02abc'>'2019-10-01';
+------------------------------+
|'2019-10-02abc'>'2019-10-01'|
+------------------------------+
|1|
+------------------------------+
1row in set
mysql>select'2019-10-01
abc'>'2019-10-02';
+------------------------------+
|'2019-10-01abc'>'2019-10-02'|
+------------------------------+
|0|
+------------------------------+
1row in set
mysql>select'abc
2019-10-01'>'2019-10-02';
+------------------------------+
|'abc2019-10-01'>'2019-10-02'|
+------------------------------+
|1|
+----------------
小学生边框简笔画手绘图片在进⾏字符串(数值型字符串) 和数值⽐较时⼀定要慎重,不同的数据库语法的⽀持是不⼀样的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。