【问题标题】:mysql removing leading zeros from fieldmysql从字段中删除前导零
【发布时间】:2015-11-05 17:51:25
【问题描述】:

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

每个公司 ID 最多 9 个字符。问题是有时它们会添加前导零,有时则不会。所以 00321390 和 321390 是一样的。

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

WHERE TRIM(LEADING '0' FROM co_grp) = TRIM(LEADING '0' FROM import_grp)

company 表中的 co_grp 是唯一索引的。 临时导入表中的 import_grp 索引正常(导入文件中可能存在重复项,这些重复项在我们的导入查询中的其他地方处理。

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

有什么更好的方法来解决这个问题?我不想进行大规模更新并删除或添加前导零,因为访问该系统的公司喜欢前导零,因此他们知道它是来自导入的文件还是(没有前导零)来自另一个来源。现在在没有对后端进行大量其他更改的情况下更改它为时已晚。

【问题讨论】:

  • 我真的认为你应该规范化你的数据并为“源”添加列,如果这是需要的话。我将把它留在这里:xkcd.com/1172

标签: mysql


【解决方案1】:

在 MySql 中,索引从左到右工作。 因此,如果您从左侧修剪任何内容,那么索引将不会产生任何影响。

使用这个:-

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

这样您就已经过滤掉了非前导零条目,并且您的查询将变得更加高效。

【讨论】:

    【解决方案2】:

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

    我试图查看一个列,其中字符串列值在创建时左侧用零填充,例如我要查找的 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 的同一客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 2010-10-10
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2014-08-09
      • 1970-01-01
      相关资源
      最近更新 更多