mysql从字段中删除前导零

时间:2015-11-05 17:51:26

标签: mysql

我有一个公司表,其中包含第三方提供的唯一ID。该表在过去一年中变得非常大(超过100,000家公司),我们遇到了从提供的数据文件中导入其他公司的问题。

每个公司ID最多9个字符。问题是有时他们会添加前导零,有时他们不会。因此00321390与321390相同。

当我们去导入新数据集时,我们会寻找具有以下内容的现有公司:

WHERE TRIM(LEADING '0' FROM co_grp) = TRIM(LEADING '0' FROM import_grp)
公司表中的co_grp索引是唯一的。 临时导入表中的import_grp索引正常(导入文件中可能存在重复项,这些重复项在导入查询中的其他位置处理。

问题在于,在此步骤上运行此导入需要花费大量时间。我考虑添加一个列并复制,以便我们有一个列没有前导零,另一个列有两个前导零,但这听起来不是一个正确的方法来处理它。

最好的办法是什么?我不想进行批量更新并删除或添加前导零,因为访问此系统的公司喜欢前导零,因此他们知道它是来自导入的文件还是(没有前导零)来自其他来源。如果没有对后端进行大量其他更改,现在改变它太晚了。

2 个答案:

答案 0 :(得分:1)

谢谢,它为我节省了很多时间。

我试图查看一个列,其中字符串列值在创建时向左填充了零,例如我要查找的 idclient 值是“21050”,并且在列值中保存为“00021050” ' 或 '021050' 等。

然后我的查询是:

select importe 
from orders 
where TRIM(LEADING '0' FROM idclient) like '21050';

如果您正在使用存储过程,那么您可能有一个名为 clienteIDParam 的参数

select importe 
from orders 
where TRIM(LEADING '0' FROM idclient) like clienteIDParam;

此查询返回 idclient 为“021050”或“0000021050”或“0021050”的值 在我的例子中,所有的行都是针对同一个客户端的,客户端代码为 21050。

答案 1 :(得分:0)

在MySql索引中从左到右工作。 因此,如果你从左边修剪任何东西,那么索引就不会有任何影响。

使用: -

WHERE co_grp like '0%' and import_grp like '0%' and TRIM(LEADING '0' FROM co_grp) = TRIM(LEADING '0' FROM import_grp)

这样您就可以过滤掉非前导零条目,您的查询将变得更有效率。