比较每个小数位

时间:2017-02-02 08:53:15

标签: mysql sql

我不确定我是否使用正确的术语描述问题,我的数学英语不是那么好。

我需要做的是根据数字的位置检查它们是否匹配两个整数的每个数字:1,数十,等等

例如,检查下表中不同的数字和想要的比较结果:

number1 | number2 | desired result
-----------------------------------
100     | 101     | 001
443     | 143     | 300
7001    | 8000    | 1001
6001    | 8000    | 2001
19      | 09      | 10

基本上我只需要每个数字的减法绝对值。所以对于第一个例子:

1 0 0
1 0 1 -
--------
0 0 1

第二名:

4 4 3
1 4 3 -
-------
3 0 0 

第三名:

7 0 0 1
8 0 0 0 -
---------
1 0 0 1

这需要在mysql中完成。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果你的数字低于10000,这应该可以胜任。 如果超过,只需修改查询;)

    SELECT number1,
           number2,
           REVERSE(CONCAT(ABS(SUBSTRING(REVERSE(number1), 1, 1) - SUBSTRING(REVERSE(number2), 1, 1)),
           IF(CHAR_LENGTH(number1) > 1, ABS(SUBSTRING(REVERSE(number1), 2, 1) - SUBSTRING(REVERSE(number2), 2, 1)), ''),
           IF(CHAR_LENGTH(number1) > 2, ABS(SUBSTRING(REVERSE(number1), 3, 1) - SUBSTRING(REVERSE(number2), 3, 1)), ''), 
           IF(CHAR_LENGTH(number1) > 3, ABS(SUBSTRING(REVERSE(number1), 4, 1) - SUBSTRING(REVERSE(number2), 4, 1)), ''))) as `desired result`
    FROM numbers

表示3位数字:

SELECT number1,
       number2,
       CONCAT(
           ABS(SUBSTRING(number1, 1, 1) - SUBSTRING(number2, 1,1)), 
           ABS(SUBSTRING(number1, 2, 1) - SUBSTRING(number2, 2,1)),
           ABS(SUBSTRING(number1, 3, 1) - SUBSTRING(number2, 3,1))
       )
FROM numbers

实际上你根本没有反转字符串。这来自我之前尝试过的更多数学方法;)

答案 1 :(得分:0)

如果你只想用整数做,可以这样做(以5位为例):

select abs(number1/10000 - number2/10000) * 10000 +
       abs(number1/1000 % 10 - number2/100 % 10) * 1000 +
       abs(number1/100 % 10 - number2/100 % 10) * 100 +
       abs(number1/10 % 10 - number2/10 % 10) * 10 +
       abs(number1 % 10 - number2 % 10)