初めて投稿させて頂きます。よろしくお願いします。
表題の件ですが
あるAテーブルの項目の属性がCHAR型で左から3文字内で数値のみの場合と英字が含まれている場合とで判断をしたいのですが。
成功イメージ例
Aテーブル
---------------------
TEST(フィールド)
1234567
12A4567
BN34567
左から3桁内数値だけ選択
結果>>>>'1234567'のレコード1件を抽出
------>SELECTで左3桁内数値のものだけ抽出したいのですが。
SUBSTR(TEST,1,3)で左の3文字を切り離したのですが、行き詰ってしまいました。
わかりづらい説明で申し訳ございませんが、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
>#1どの
別名に対する条件(where)記述は、文法エラーになるはずです。
また、文法エラーを回避しても、"1o9"のような値が範囲にマッチしますので
比較の考え方も再考の余地ありです。
本題ですが..
3桁限定であるなら、
select * from 表
where
substr(TEST,1,1) between '0' and '9' and
substr(TEST,2,1) between '0' and '9' and
substr(TEST,3,1) between '0' and '9';
と書くのが判りやすく手っ取り早いと思いますよ。
桁数が長く、とても書ききれないなどの事情があるなら、
select * from 表
where replace(translate(substr(TEST,1,3),'123456789','000000000'),'0','') is null
のように、translate関数やreplace関数を使って、小細工するのが手軽な方法です。
(未検証のSQLですが)
念のため、解説すると..
TESTフィールドの先頭3桁の数字を抹消してみて、文字列がなくなれば、3桁とも数字だった。という考え方です。
>korochan様
ご回答頂きありがとうございます。
3桁限定では1桁づつ確認して行い、桁が長い場合は抹消してNULLチェックで比較する。理解いたしました。早速明日実証させて頂き報告させて頂きます。ありがとうございました。
No.5
- 回答日時:
Oracleの経験があまりないのですが、
substr(列,i,j) between a and b
のような条件を指定した場合、インデクスは使用
できるのでしょうか?
いくつかのRDBMSを知っていますが、こういった式
(列の一部を関数で切り出す)を書くと、インデクス
が利用できないものが少なくありません。
No.4
- 回答日時:
>#1どの
別名に対する条件(where)記述は、文法エラーになるはずです。
また、文法エラーを回避しても、"1o9"のような値が範囲にマッチしますので
比較の考え方も再考の余地ありです。
確かにその通りですね。失礼しました(^^;ヾ
No.2
- 回答日時:
#1です。
英字が含まれている場合はどのように書いたらよろしいでしょうか・・・。
上3桁に英字が含まれてるもののみを抽出するっていう意味ですか?
だとしたら、#1の回答が正しければ、その逆の条件で抽出してあげればよいので、
select
TEST as TEST
substr(TEST,1,3) as TEST_W
from Aテーブル
where
TEST_W < '000'
or TEST_W > '999'
結局、CHR型の大小比較って文字コードでの大小比較だと思うので。
なお、#1の回答でfrom句が抜けてました。すみません。
g_express999様、早々のご回答ありがとうございます。
文字コードの比較になるんですね。勉強不足です。
Access2003ではIsNumeric(left(TEST),3)で書いてうまくいったので、IsNumericを意識していろいろやったのですがオラクルではうまくいかなかったのです。
とても参考になるお答えを頂きまして大変ありがとうございます。
明日、実証してご報告させて頂きます。
ありがとうございました。
No.1
- 回答日時:
たとえば、
select
TEST as TEST
substr(TEST,1,3) as TEST_W
where
TEST_W between '000' and '999'
ではダメですか?
早々のご回答ありがとうございます。
今の環境では実証できないのですが、構文を拝見させて頂きまして、いけそうな気がしました。さっそく明日実証し結果を報告させて頂きます。頂きました回答文では数値のパターンは判別できそうなのですが英字が含まれている場合はどのように書いたらよろしいでしょうか・・・。 お礼欄に質問を追加するような事を書きまして、大変恐縮です。すみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle SQL update方法 2 2022/06/22 14:07
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
MERGE文を単体テーブルに対して...
-
AccessからOracleへの外部結合
-
SELECTの結果で同一行を複数回...
-
SET句内で複数の条件を指定して...
-
SQLでの絞り込み検索
-
外部結合とor条件混在の記述方法
-
【SQL】SELECT文
-
結合と副問い合わせの違い
-
updateの一括実行
-
select文でフリーズします。
-
重複レコードの取得
-
SQL GROUPで件数の一番多いレコ...
-
SQL抽出の書き方について(一部...
-
MINUS の結果の rowid を取得し...
-
oracleの分割delete
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
固定値を含む結合と複数テーブ...
-
複数テーブルのMAX値の行データ...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
外部結合とor条件混在の記述方法
-
oracleの分割delete
-
SET句内で複数の条件を指定して...
-
SQL GROUPで件数の一番多いレコ...
-
DELETE 文とEXISTSの使い方につ...
-
COUNTの取得方法(?)について...
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
unionでマージした副問合せを結合
-
副問い合わせのinsert文
-
結合と副問い合わせの違い
おすすめ情報