SQLでは、RPAD()
文字列の右側を指定された文字で埋めるために使用されます。この関数は文字列と数値に使用できますが、DBMSによっては、数値をパディングする前に文字列として渡す必要がある場合があります。
RPAD()
を持つDBMS 関数には、MySQL、MariaDB、PostgreSQL、およびOracleが含まれます。
しないDBMS RPAD()
があります 関数にはSQLServerとSQLiteが含まれます。
例
RPAD()
を示す例を次に示します。 機能:
SELECT RPAD('Look Right', 40);
結果:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+>
ここでは、文字列の右側にスペース(デフォルトの埋め込み文字)が埋め込まれ、結果の文字列の長さは40文字になります(40
を指定したため) 2番目の引数として)。
Oracleも同じように機能しますが、FROM DUAL
を使用する必要があります このようなクエリを実行する場合(実際のテーブルをクエリせずに):
SELECT RPAD('Look Right', 40)
FROM DUAL;
結果:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
上記の例では、パディングを明確にするために多くのパディングを使用しました。
正しいパディングをより明確に示す別の例を次に示します。
SELECT CONCAT(RPAD('abc', 4), 'def');
結果:
abc def
この場合、abc
を連結しました def
を使用 しかし、abc
RPAD()
で右パディングが適用されました 機能。
パディング文字を指定
パディングは必ずしもスペースである必要はありません。オプションで、3番目の引数を追加して、パディングで使用する1つまたは複数の文字を指定できます。
SELECT RPAD('Rat', 4, 't');
結果:
Ratt
また、ゼロ(または別の数字)で数字を右に埋めるために使用することもできます:
SELECT RPAD('7', 3, '0');
結果:
700
これにより明らかに数値が変わります。この場合、数値に100を掛けるだけで同じことが達成できます。ただし、数値を掛けても実際にはパディングは適用されません。
次の例は、私が何を意味するかを示しています。
SELECT RPAD('77', 3, '0');
結果:
770
77に100を掛けると、間違った結果になります。
上記の例では、番号を文字列として渡しました。
一部のDBMS(MariaDBやMySQLなど)では、数値を数値として渡すことができます。また、数値を埋めるために次のように渡すことができます。
SELECT RPAD(7, 3, 0);
結果:
700
Oracleでもこれを行うことができます:
SELECT RPAD(7, 3, 0)
FROM DUAL;
結果:
700
しかし、PostgreSQLにはこれに関する問題があります:
SELECT RPAD(7, 3, 0);
結果:
ERROR: function rpad(integer, integer, integer) does not exist
SQL Server
SQLServerにはRPAD()
がありません 関数ですが、数字や文字列にパディングを追加することを妨げるものではありません。
数字
数値に小数部分がある場合、FORMAT()
関数で十分です:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
結果:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
それが機能する方法は、数値に続いてフォーマット文字列を渡すことです。上記の例では、フォーマット文字列はカスタム数値フォーマット指定子で構成されており、元の数値の小数部分に数字が追加されます。元の数値にまだそれほど多くの桁がない場合は、ゼロが埋め込まれます。
ただし、数値に小数部分が含まれていない場合は、REPLACE()
を使用できます。 FORMAT()
で適用される小数点記号を削除する関数 機能:
SELECT
REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";
結果:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
この方法は、必要に応じて先行ゼロを追加するためにも使用できます。フォーマット文字列の小数点の左側に追加するだけです。
ここでは、en-US
を使用しました 小数点がピリオド/ピリオド/ピリオドであることを確認するための(オプションの)3番目の引数として。これはen-US
で使用される規則です。 ロケール。
テキスト
テキストデータに使用できる手法は次のとおりです。
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
結果:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
ただし、誤って文字列の一部を切り落としたり、不要なスペースを追加したりしないように注意する必要があります。