2015-06-05 40 views
2

我需要屏蔽mysql中的整数字段,使9999911111变成9900001111.我想保留前两位数字和最后四位数字,并且需要将保留在字段中的整数的其余数字标记为0 。mysql中的掩码整数字段

我已经创建了一个查询,它的工作,但我不知道这是否是正确的方法来做整数或不。

update table_name 
    set field_name=CONCAT(SUBSTR(field_name, 1, 2), 
       REPEAT('0', CHAR_LENGTH(field_name) - 6), 
       SUBSTR(field_name, CHAR_LENGTH(field_name)-3, CHAR_LENGTH(field_name))); 
+0

和那个查询为你做了什么? –

+0

这工作正常。但我不知道这是否是整数域的正确方法。 – Anuj

+0

mysql会高兴地把你的整数看作一个字符串,所以是的,我没有看到任何理由做任何不同的事情 –

回答

1

只是尝试不同的方法。

SET @myVar = 344553543534; 
SELECT @myVar - (SUBSTRING(@myVar, 4, LENGTH(@myVar) - 7) * 10000) ; 

上面提到的公式会给出344000003534结果。尝试不同的组合,发现它的工作。

所以您的查询需要更改下面

UPDATE table_name 
    SET field_name= 
(field_name - (SUBSTRING(field_name, 4, LENGTH(field_name) - 7) * 10000)); 

说明给出:

Consider Number, a = 344553543534; 
Expected Result, b = 344000003534; 

c = (a - b) = 344553543534 - 344000003534 = 553540000; 

现在,如果你考虑的结果,C,55354是掩蔽需要在数字和0000表示最后4个号码保持打开状态。因此,要获得蒙面值,我们可以使用公式b = a - c;如果要获得蒙面值,可以使用公式b = a - c;

所以现在拿到C,使用SUBSTRING(a, 4, LENGTH(a) - 7) * 10000

编辑:只保留前两个号码,使用3而不是4个和6个而不是7。我认为你需要保持第一3.

SET @myVar = 344553543534; 
SELECT @myVar - (SUBSTRING(@myVar, 3, LENGTH(@myVar) - 6) * 10000) ;