2015-11-05 313 views
1

我有一個由第三方提供的唯一ID的現有公司表。這個表在過去的一年裏增長很多(超過10萬家公司),我們遇到了從提供的數據文件導入額外公司的問題。mysql從字段中刪除前導零

每個公司ID最多9個字符。問題是有時他們會添加前導零,有時他們不會。因此,00321390是一樣的321390.

當我們去進口我們尋找現有公司有這樣的一個新的數據集:在公司表

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

co_grp被索引唯一。從臨時進口表 import_grp在在我們的進口查詢其他地方處理的導入文件索引正常的(有可能是重複的。

的問題是,它採取的大量時間對這一步驟運行該進口。我想添加一個列和複製,以便我們有一列沒有前導零,另一列有兩個前導零,但這聽起來不像是一個正確的方式來處理這個。

什麼是一個更好的方法來解決這個問題?我不想做大規模更新並刪除或添加前導零,因爲訪問此係統的公司喜歡前導零,因此他們知道它是來自導入的文件還是(不是領先的零)來自另一個來源現在已經晚點改變了,現在沒有很多其他的後端改變。

+0

我真的認爲你應該規範你的數據,並添加'源'列,如果這是需要的。我會在這裏留下這個:https://xkcd.com/1172/ – vhu

回答

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) 

這樣,你就已經被過濾掉非前導零個的條目和您的查詢就會變得更有效率。