- - PR -
SQL DECODE関数の使い方を教えてください
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-02-09 15:38
INFOテーブルにTITLEというカラムがあります。
TITLEの内容は数値+文字列が入っています 例:0918 テスト このような行が複数行あったので、先頭の文字をみて結果内容を変えようと思ったのですが、「ORA-01722: 数値が無効です。」と表示されてしまいSQLが通りません。 以下が実行したSQLです select DECODE(TITLE, 09, '19', 00,'20',NULL,'****','UNDEFINED') from INFO; 幾つかDECODEを使用しているサンプルを拝見しましたが、記述の仕方が良く掴めませんでした。 よろしくお願いします。 | ||||
|
投稿日時: 2009-02-09 15:59
http://www.shift-the-oracle.com/sql/functions/decode.html
| ||||
|
投稿日時: 2009-02-09 16:05
先頭の文字をみるのであれば、SQL文のTITLE(項目名?)の頭2桁を取得しないといけませんよね? SUBSTR(TITLE,1,2) | ||||
|
投稿日時: 2009-02-09 16:24
私がよくやるのは
例えば今回の例ですと
という SQL をまず作成し、実行します。 当然仰っている通りのエラーが出ます。 ここから関数のリファレンス等を調べて実行出来るようになるまで何度も修正します。 実行出来るようになったとしても思っていた物とは違う結果になっていた場合は さらに修正を加えて行きます。 最終的に思い通りの結果になった時にプログラム側に反映させます。 結果から言うと文字列と数値を比較しているからエラーが出てます。 あと「先頭の文字をみて」という処理はこの SQL には入っていません。 | ||||
|
投稿日時: 2009-02-09 17:26
Kingさん、ありがとうございます。
先頭文字を検索する場合、LIKEが使えそうなので考えてみます。 | ||||
|
投稿日時: 2009-02-09 19:17
select
SUBSTR(TITLE,1,4) AS TITLE from INFO where TITLE >= SUBSTR(to_char(sysdate,'yyyy'),3,4) AND TITLE BETWEEN '10' AND '99' ORDER BY TITLE ASC 色々とやってみた所、DECODEでも可能でしたが、「なんとなく出来た」 という感じでしたので上記のようになりました。 これも使い方があっているのか微妙ですが^^; | ||||
|
投稿日時: 2009-02-09 21:26
すみません。
どういうレコードからどういう結果を取得したい SQL なのか、 何をどうしたい SQL なのかがわからないので その SQL が合っているのかどうかは誰にもわかりません。 思い通りの結果が取得できたのなら問題ありませんが。 [ メッセージ編集済み 編集者: King 編集日時 2009-02-09 21:29 ] | ||||
|
投稿日時: 2009-02-10 09:38
自分で書いた SQL の意味はわかっていますか?
何をしたいのかよくわからない SQL です。 関数の意味は調べていますか? 基本的な構文はわかっているのでしょうか? SELECT の意味とか。 > select > SUBSTR(TITLE,1,4) AS TITLE TITLE の先頭4文字を取得 > from > INFO INFO テーブルから > where >TITLE >= SUBSTR(to_char(sysdate,'yyyy'),3,4) 現在日時の年4桁部分の3文字目以降4文字(ありえない) > AND > TITLE BETWEEN '10' AND '99' TITLE の値が文字列「10」と文字列「99」の範囲にある >ORDER BY TITLE ASC TITLE で昇順に並べる |