82

CSV ファイルが CSV 形式で送られてきました。関心のあるフィールドは 8 桁です。それらのいくつかは 0 で始まりました。フィールドには数値が送信されました。そのため、先頭のゼロをいくつか削除しました。

私はすでにフィールドを varchar に変換しました。私は今これを行う必要があります:

私は今これを持っています:

12345678
1234567

私はこれを持っている必要があります:

12345678
01234567
4

4 に答える 4

182

フィールドを数値に戻しZEROFILL、ゼロを保持するために使用します

また

使用するLPAD()

SELECT LPAD('1234567', 8, '0');
于 2012-06-22T22:48:47.727 に答える
31

おそらく:

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

以下のコメントで、mylesg からの質問に応じて編集されました。

わかりました、クエリに変更を加えているようですが、テーブルに永続的に貼り付ける(変更する)にはどうすればよいですか?SELECT の代わりに UPDATE を試しました

次のようなクエリを使用したと仮定しています。

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

それが成功したが、テーブルの値に先行ゼロがない場合は、おそらく列を数値型として設定することをお勧めしますか? その場合は、先頭のゼロを保持するために、列が text/varchar() 型になるようにテーブルを変更する必要があります。

初め:

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

次に、更新を実行します。

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

したがって、これは先行ゼロを保持する必要があります。欠点は、列が厳密に数値型ではなくなったことです。そのため、数値以外がその列に入力されないようにするために、(ユースケースに応じて) より厳密な検証を実施する必要がある場合があります。

参考文献:

于 2012-06-22T22:49:31.377 に答える
0

を使用した以前の回答LPAD()が最適です。ただし、特別な処理または高度な処理を行いたい場合は、パディングをより反復的に制御できる方法を次に示します。また、同じことを達成するために他の構成を使用する例としても役立ちます。

UPDATE
    mytable
SET
    mycolumn = CONCAT(
        REPEAT(
            "0",
            8 - LENGTH(mycolumn)
        ),
        mycolumn
    )
WHERE
    LENGTH(mycolumn) < 8;
于 2021-01-22T02:32:43.843 に答える