mysql从字段中删除前导零

mysql从字段中删除前导零,mysql,Mysql,我有一个由第三方提供的具有唯一ID的现有公司表。在过去的一年中,该表已经变得相当大(超过100000家公司),我们从提供的数据文件中导入其他公司时遇到了一个问题 每个公司ID最多可包含9个字符。问题是,有时它们会添加前导零,有时则不会。因此00321390与321390相同 当我们要导入新数据集时,我们会查找具有以下内容的现有公司: WHERE TRIM(LEADING '0' FROM co_grp) = TRIM(LEADING '0' FROM import_grp) 公司表中的co_g

我有一个由第三方提供的具有唯一ID的现有公司表。在过去的一年中,该表已经变得相当大(超过100000家公司),我们从提供的数据文件中导入其他公司时遇到了一个问题

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

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

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

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


有什么更好的方法可以做到这一点?我不想进行大规模更新并删除或添加前导零,因为访问此系统的公司喜欢前导零,以便他们知道它是否来自导入的文件或(无前导零)来自另一个来源。现在更改它太晚了,后端没有很多其他更改。

在MySql中,索引从左到右运行。 所以,若你们从左边修剪任何东西,那个么索引就不会有任何效果

使用以下命令:-

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

这样,您就可以过滤掉非前导零条目,您的查询将更加高效。

谢谢,这为我节省了很多时间

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

我的问题是:

select importe 
from orders 
where TRIM(LEADING '0' FROM idclient) like '21050';
如果您在存储过程中工作,可能有一个名为clientedparam的参数

select importe 
from orders 
where TRIM(LEADING '0' FROM idclient) like clienteIDParam;
此查询返回idclient为“021050”或“0000021050”或“0021050”的值
在我的例子中,所有的行都是针对同一个客户机的,客户机代码为21050。

我真的认为您应该规范化您的数据并添加“源”列,如果这是需要的话。我就把它留在这里: