こんにちは、カメ助(@kamesuke_blog)です。
業務でOracleのカラムサイズを拡張することがあり、実際のテーブルデータの文字数とバイト数を調べるSQLを作成したのでまとめておきます。Oracleユーザーの参考になれば嬉しいです。
バイト数以上のデータをDBに格納しようとすると、「ORA-12899: 列 string の値が大きすぎます(実際: string、最大: string)」のエラーが出ますので注意しましょう。
ORA-12899の対処方法を知りたい方は、以下にまとめていますのでお読みください。
【Oracle】ORA-12899: 列”XXX”の値が大きすぎます(実際: 5、最大: 4)の原因と対処方法
テーブルデータから文字数とバイト数を調べるSQL
Oracleで文字列の長さとバイト数を取得するSQLは以下の通りです。
1 2 3 4 5 6 |
--文字列長さとバイト数を取得するSQL SELECT [対象のカラム名], LENGTH([対象のカラム名]) as LENGTH, LENGTHB([対象のカラム名]) as LENGTHB FROM [テーブル名]; |
出力結果の例
[対象のカラム名] | LENGTH | LENGTHB |
---|---|---|
日本 | 2 | 6 |
Japan | 5 | 5 |
カレンダー | 5 | 15 |
出力結果より、半角1文字が1バイト、全角1文字が3バイトになっていることが分かります。例として、全角100文字の文字列を入力する必要がある場合は、カラムサイズを300 byte以上に設定する必要があります。
固定文字列の文字数とバイト数を調べるSQL
先ほどの例では、テーブルデータを元に文字列の長さとバイト数を確認していましたが、手っ取り早く1文字当たりのバイト数を知りたい時もありますよね。
そんな時には、以下のSQLを使用してください。
1 2 3 4 5 6 |
--文字列長さとバイト数を取得するSQL SELECT 'カメ助です', LENGTH('カメ助です') as LENGTH, LENGTHB('カメ助です') as LENGTHB FROM dual; |
出力結果
‘カメ助です’ | LENGTH | LENGTHB |
---|---|---|
カメ助です | 5 | 15 |
出力結果より、全角1文字が3バイトになっていることが分かりますね。(上記SQLの’カメ助です’は好きな文字に置換して使用してください。)
まとめ
Oracleで文字列の長さとバイト数の取得方法についてまとめます。
- 文字列の長さ :LENGTH
- 文字列のバイト数:LENGTHB
「LENGTH」、「LENGTHB」 は長さ0の文字列の長さは計れないので注意しましょう。
以上がOracleで文字列の長さとバイト数の取得方法でした。バイトサイズがオーバーしないように気を付けましょう!
SQLの勉強にはこの本がオススメですよ。
コメント
コメント一覧 (1件)
[…] 【Oracle】文字数とバイト数を調べるSQL(ORA-12899) […]