关于mysql字符和数字类型转换的问题研究
今天晚上临近下班,被问到一个sql的问题,特此记录,作为提升:
关于字符和数字类型转换的问题。
看几种情况:
1.
SELECT '10' - 2 ;
结果:
2.
SELECT 10 > 2;
3.
SELECT '10' > 2;
4.
SELECT '10' > 20;
5.
SELECT
CASE
WHEN '10' > '2'+0 THEN
'判断条件为真'
ELSE
'判断条件为假'
END;
6.
SELECT
CASE
WHEN '10' > '2'THEN
'判断条件为真'
ELSE
'判断条件为假'
END;
SELECT '10' - '2a';
8.
SELECT '10' > '2a' + 0;
9.
SELECT '10b' > 'y';
10.
SELECT 'a' < 'b';
11.
SELECT 'a' < 'b' + 0;
12.
SELECT 'b' - 'a';
13.
SELECT '10a' - '11c';
搜了一些博客:
说是:
两个字符串:
做运算,是按照对象开头的数字进行的
SELECT 10 - '2a121';
SELECT 'a' - 1;
纯字母开头数字是0;
SELECT 'abc' < 'b';
一个数字,一个是字符串呢?
SELECT '3a' > 1;
SELECT '3a' > 4;
一旦有数字,情况又不一样了,它开始按照开头数字比较
SELECT '10' >'2a';
SELECT '10' > '2a' +0;
这里应该是,先进行了 2+0 = 2,然后,进行了纯数字比较,10>2
归纳:
比较大小:
a | b | 规则 |
---|---|---|
字符串 | 字符串 | 按位比较 |
字符串 | 数字 | 按照对象开头数字 |
字符串 | 字符串+数字 | 按照对象开头数字 |
加减等
a | b | 规则 |
---|---|---|
字符串 | 字符串 | 对象开头的数字,没有数字,按0算 |
字符串 | 数字 | 按照对象开头的数字 |
字符串 | 字符串+数字 | 按照对象开头的数字 |
也就是说,只要+0可以让不管比较大小,还是运算,按照截取开头数字,再来进行操作。