Mysql 比较每个十进制位置的两个整数的位数
我不确定我是否用正确的术语描述了这个问题,我的数学英语不是很好 我需要做的是根据数字的位置检查它们是否匹配两个整数的每个数字:1,10。。等 例如,检查下表中的不同数字和所需的比较结果:Mysql 比较每个十进制位置的两个整数的位数,mysql,sql,Mysql,Sql,我不确定我是否用正确的术语描述了这个问题,我的数学英语不是很好 我需要做的是根据数字的位置检查它们是否匹配两个整数的每个数字:1,10。。等 例如,检查下表中的不同数字和所需的比较结果: number1 | number2 | desired result ----------------------------------- 100 | 101 | 001 443 | 143 | 300 7001 | 8000 | 1001 6001 | 80
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中完成。有什么想法吗?如果你的数字低于10000,这应该可以解决问题。 如果超过,只需修改查询;) 对于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
实际上,你根本不需要反转字符串。这来自于我以前尝试过的一种更为数学化的方法;) 如果只想使用整数,可以这样做(以5位数字为例):
你说得对,谢谢!刚刚更正。1号和2号的位数有限制吗?两个数字的比较长度是否总是相同的?不用担心,我可以一直填充它。最大位数是多少?它可以达到10位数8000-7001!=1001,这显然是第3行所需的结果。请检查上面的示例,我不需要简单地(number1-number2)Nice,但它不应该将“0”放在ELSE中而不是“”中吗?输出是一个字符串。如果你把“0”放在长度检查的else部分,你会得到:
100-101=0001
,如果001
Woha!太好了!即使我不完全明白这里发生了什么。现在的问题是,如果我有一个固定的数字长度,我应该使用一个if语句吗?
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
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)