我有發票號碼的表。指南指出,數字應該有6位或更多位數。首先嚐試做:帶領先零的LPAD
UPDATE t1 SET NUMER=CONCAT('00000',NUMER) WHERE LENGTH(NUMER)=1;
UPDATE t1 SET NUMER=CONCAT('0000',NUMER) WHERE LENGTH(NUMER)=2;
UPDATE t1 SET NUMER=CONCAT('000',NUMER) WHERE LENGTH(NUMER)=3;
UPDATE t1 SET NUMER=CONCAT('00',NUMER) WHERE LENGTH(NUMER)=4;
UPDATE t1 SET NUMER=CONCAT('0',NUMER) WHERE LENGTH(NUMER)=5;
但這並不高效,甚至漂亮。我試過LPAD
功能,但隨後而來的問題,因爲功能:
UPDATE t1 SET NUMER=LPAD(NUMER,6,'0') WHERE CHAR_LENGTH(NUMER)<=6 ;
返回零行不受影響。也google搜索,他們說,把零放入報價將解決問題,但沒有,有任何幫助?這是每日進口。
編輯: 柱NUMER是INT(19)和已經包含像數據:
NUMER
----------
1203
12303
123403
1234503
...
(它是由現在填充有從3到7位不同長度的數據)
你的'NUMER'列有什麼數據類型?並且不使用數字值上的'ZEROFILL'屬性不能解決您的問題了嗎? http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html – CBroe
您無法更新INT列以包含可變數量的前導/尾隨零。另外,INT(19)是毫無意義的。這不是一個19位數的整數。它是一個4字節的整數(2的32次冪),顯示長度爲19.顯示長度與它所說的一樣 - 它將顯示多少位數,因此它對數字的實際長度沒有影響。長話短說 - 從6位數的發票開始,並不斷增加數字。 –
@CBroe,不,ZEROFIL不好,因爲我有例如歷史數據。 1203改爲001203,我有7位數字。所以我會改變每個數字後面的所有歷史數字 – jaczes