Hinzufügen einer führenden Null zu einigen Werten in der Spalte in MySQL


75

Ich habe eine CSV-Datei in CSV an mich gesendet. Das Interessengebiet besteht aus 8 Ziffern. Einige davon begannen mit einer 0. Das Feld wurde numerisch gesendet. Also habe ich jetzt einige führende Nullen fallen lassen.

Ich habe das Feld bereits in varchar konvertiert. Ich muss jetzt folgendes tun:

Ich habe das jetzt:

12345678
1234567

Ich muss das haben:

12345678
01234567

Antworten:


168

Ändern Sie das Feld wieder in numerisch und ZEROFILLbehalten Sie die Nullen bei

oder

verwenden LPAD()

SELECT LPAD('1234567', 8, '0');

OP muss Karriere gemacht haben. Vielleicht ist ein Klempner oder ein Bäcker oder ein Küfer. Ich habe Ihre Antwort hier weitergeleitet stackoverflow.com/q/25997177 btw;)
Funk Forty Niner

Ja, da es tatsächlich die Frage beantwortet hat. Das OP schien sich nicht viel um Google gekümmert zu haben.
Funk Forty Niner

28

Möglicherweise:

select lpad(column, 8, 0) from table;

Bearbeitet als Antwort auf die Frage von mylesg in den Kommentaren unten:

ok, scheint die Änderung an der Abfrage vorzunehmen - aber wie kann ich dafür sorgen, dass sie dauerhaft in der Tabelle bleibt (geändert wird)? Ich habe ein UPDATE anstelle von SELECT versucht

Ich gehe davon aus, dass Sie eine Abfrage ähnlich der folgenden verwendet haben:

UPDATE table SET columnName=lpad(nums,8,0);

Wenn dies erfolgreich war, die Werte der Tabelle jedoch immer noch keine führenden Nullen enthalten, würde ich vorschlagen, dass Sie die Spalte wahrscheinlich als numerischen Typ festlegen. Wenn dies der Fall ist, müssen Sie die Tabelle so ändern, dass die Spalte vom Typ text / varchar () ist, um die führenden Nullen beizubehalten:

Zuerst:

ALTER TABLE `table` CHANGE `numberColumn` `numberColumn` CHAR(8);

Führen Sie zweitens das Update aus:

UPDATE table SET `numberColumn`=LPAD(`numberColum`, 8, '0');

Dies sollte dann die führenden Nullen bewahren; Der Nachteil ist, dass die Spalte nicht mehr ausschließlich numerisch ist. Daher müssen Sie möglicherweise eine strengere Validierung erzwingen (abhängig von Ihrem Anwendungsfall), um sicherzustellen, dass keine Ziffern in diese Spalte eingegeben werden.

Verweise:


ok, scheint die Änderung an der Abfrage vorzunehmen - aber wie kann ich dafür sorgen, dass sie dauerhaft in der Tabelle bleibt (geändert wird)? Ich habe ein UPDATE anstelle von SELECT versucht.
mpg

3

Ich hatte ein ähnliches Problem beim Importieren von Telefonnummern aus Excel in die MySQL-Datenbank. Ein einfacher Trick, ohne die Länge der Telefonnummer identifizieren zu müssen (da die Länge der Telefonnummern in meinen Daten unterschiedlich war):

UPDATE table SET phone_num = concat('0', phone_num) 

Ich habe gerade 0 vor dem phone_num.


2
nein, denn abhängig von den Einstellungen und dem
Feldtyp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.