• ベストアンサー

Oracle8での数値チェック

現在、Oracle8.1.7で開発しております。 検索する条件として、『数値かどうか』または『文字列かどうか』 という判断を行いたいのですが可能でしょうか? やりたい事は、以下のデータの右から2桁目が数値となっているものと 文字列になっているものとを区別したいのです。  ○○○○-A01  ○○○○-C99  ○○○○-AB1  ○○○○-Z21     : 設計上、すべてのフィールドは『VARCHAR2』となっています。 よろしくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • yakumon
  • ベストアンサー率35% (22/62)
回答No.1

substring : 部分文字列の抽出 length : 文字長 を使えばできるのでは・・・ 例えば where substring(length( フィールド名 ) - 2, 1) >= '0' and substring(length( フィールド名 ) - 2, 1) <= '9' なんて感じで。

mybigbaby
質問者

お礼

ありがとうございます! SUBSTR(KATA,10,1) BETWEEN '0' AND '9' SUBSTR(KATA,10,1) BETWEEN 'A' AND 'Z' で解決できました! ついつい数値かどうかチェックできる関数を探してしまい…(苦笑 勉強になりました。 ありがとうございました。

その他の回答 (1)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 数値かどうかの確認方法ですが、数値だと仮定してNUMBER 型変数に 代入を行い、例外が発生するかどうかで確認する方法もあります。 Number型変数 := to_number(substr(フィールド名, -2, 1), 'FM9'); とすれば、'0' ~ '9' 以外の値が入っていた時は、例外が発生します。 #1 の方のように、length 関数を使用してもOk ですが、substr 関数の 第2パラメータにマイナスの値を指定すると、文字列の終わりから文字を 切り出してくれます。

mybigbaby
質問者

お礼

文字列の分と数値の分を別々にして並べたかったので、 抽出してからでは遅かったのです。 説明不足で申し訳ありませんm(_ _)m でも勉強になりました。 ありがとうございました。

関連するQ&A