web-dev-qa-db-ja.com

substrを使用してOracleで文字列をトリムする

指定した長さに文字列をトリムします。文字列が短い場合、私は何もしたくありません。仕事をする関数substr()を見つけました。ただし、文字列が最大長より短い場合、Oracleのドキュメントには何も起こりません。

例えばこれは:

select substr('abc',1,5) from dual;

'abc'を返します。これが必要です。

この使用法に対して関数が定義されていないようだから、これが安全かどうかを尋ねたい。切り捨てるより良い方法はありますか?

12
Michal

まったく問題ありませんが、必要に応じて次のクエリを使用できます。

select substr('abc',1,least(5,length('abc'))) from dual;
15
zaratustra

これは興味深い質問です。驚いたことに、 documentation はこの点を明示的にカバーしていないようです。

あなたがしていることは非常に安全だと思います。文字列が短すぎる場合、substr()は文字列の末尾に文字を「追加」しません。私は、Oracleを含む多くのデータベースでこの動作に長い間依存しています。これは、他のデータベースおよびほとんどの言語で同様の機能がどのように機能するかです。

1つの例外は、元のデータ型がchar()型ではなくvarchar2()型である場合です。この場合、関数は同じタイプの文字列を返すため、スペースが埋め込まれる可能性があります。ただし、それは実際には関数ではなく型のプロパティです。

7
Gordon Linoff

SUBSTRのみを使用して末尾の空白にならないことを絶対に確認したい場合(そうではありませんが、場合によっては安心できることもあります)を使用できます。

SELECT RTRIM(SUBSTR('abc',1,5)) FROM DUAL;

共有してお楽しみください。

4
Bob Jarvis

以下のクエリを使用することをお勧めします

SELECT SUBSTR('abc',1,LEAST(5,LENGTH('abc'))) FROM DUAL;

上記のクエリでは、文字列の長さまたは数字の5のいずれか小さい方が使用されます。

4