1

次のように、country_id という名前の mysql データベース列を取得しました。

country_id
----------
1
2
59
435
2714

私が今達成しようとしているのは、各 ID に先行ゼロを追加することです。結果は次のようになります。

country_id
----------
0001
0002
0059
0435
2714

各 ID は最大 4 桁である必要があります。それでおしまい。

上記の方法でこの country_id 列を更新するために PHPmyAdmin で使用できる SQL ステートメントはありますか?

よろしくお願いします!

4

3 に答える 3

5

ZEROFILL列で次のように宣言します。

mysql> create table foobar (nr integer(4) ZEROFILL);
Query OK, 0 rows affected (0.31 sec)

mysql> INSERT INTO foobar VALUES (1),(12),(123),(1234),(12345);
Query OK, 5 rows affected (0.05 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM foobar;
|  0001 
|  0012 
|  0123 
|  1234 
| 12345 
于 2012-12-12T18:09:04.413 に答える
2

列が文字データ型(数値ではない)の場合country_id、ゼロを付加して右端の部分を取ることができます。

UPDATE foo SET country_id = RIGHT(CONCATENATE('0000',country_id),4)

UPDATE foo SET country_id = LPAD(country_id, 4, '0')

(注:いずれかの値がcountry_id4文字より長い場合、これらのステートメントのいずれかでデータが失われます... country_idが4文字を超える場合、最初のステートメントは最も右の文字を取得し、2番目のステートメントは左端の4文字を取得します。値の先頭に「-」文字が含まれているため、「00-4」などの奇妙な値になります。LTRIM関数を使用して、先頭のスペースを削除できます。


一方、country_idが数値データ型の場合、先行ゼロを実際に追加することはできません。

整数型の場合、表示長とZEROFILLオプションを指定できます。

country_id INT(4) ZEROFILL

ただし、長さ修飾子とZEROFILL属性を使用して指定されたフォーマットを実行するのはクライアントアプリケーション次第であり、これらの属性を使用して「データベース内で」実行されることは実際にはありません。(MySQLコマンドラインクライアントはこれらの設定を監視し、最大4文字までゼロで埋められた値を表示します。ただし、他のクライアントはそれを行う必要はありません。)

クエリで、その値を文字にキャストし、先頭の「0」文字で埋めることもできます。

SELECT LPAD(country_id, 4, '0') AS country_id

ただし、数値ではなく文字タイプが返されることに注意してください。

于 2012-12-12T18:14:09.963 に答える
0
SELECT LPAD(country_id, 4, '0')
FROM your_table

DB構造を変更できる場合は、ZEROFILLを使用してください

于 2012-12-12T18:07:05.480 に答える