• 締切済み

ORACLEの「DECODE」と同じ意味の関数が知りたい

SQL serverを使用しています。 ORACLEのDECODEに相当する関数を使用したいのですが、 わからなくて困っています。 具体的には、 特定の行に対して「全角スペース」もしくは「半角スペース」があったときに、nullに置換したい。 (なるべくシンプルな方法で!!) 教えてください。

みんなの回答

回答No.2

No1の補足です。(ポイントはNo1に振ってください) >ORACLEのDECODEに相当する関数 といういみであればNo1で使われているCase文になるはずです。Books Onlineに使用方法はあるはずなので。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

SQL Server 2000において   CREATE TABLE test (   a VARCHAR(10)   ) を作成して   INSERT test VALUES("aaa_aaa")   INSERT test VALUES("bb△bb")   INSERT test VALUES("ccc") としておいて   SELECT * FROM test WHERE CHARINDEX('_', a) > 0 を行うと最初の2行が選択されるので、どこかの段階で空白は全角・半角とも同一視するように処理されているようです。(区別するための設定もどこかにあるはずなのですが、ちゃんと探していません。) このとき、   SELECT CASE CHARINDEX('_', a) WHEN 0 THEN a ELSE NULL END FROM test を行うと、最初の2行がNULL、残る1行がそのままcccと出てきます。あまりコンパクトではありませんが。 ※注:上記のなかで「_」は半角空白、「△」は全角空白のかわりです。

関連するQ&A

  • オラクルSQLの問題でDECODE関数について

    オラクルSQLの問題でDECODE関数について教えて下さい。 SELECT employee_id, DECODE(department_id,80, DECODE(commission_pct,NULL,'NO COMMISSION', salary * commission_pct), 'NOT SALES'} "COMMISSION" FROM employees; 上記のは 『DEPATMENT_ID列が80の場合でかつCOMMISSION_PCT列がNULL値の場合は「NO COMMISSION」、NULL値でない場合は「SALARY*COMMISSION_PCT」が文字列に変換されて戻されます。また、DEPARTMENT_ID列が80以外の場合は「NOT SALES」が戻されます。』と解説があり、 次に SELECT employee_id, DECODE( NULL IF(commission_pct,NULL), 0,salary * commission_pct, 'NO COMMISSION') "COMMISSION" FROM employees; このコードについては 『DECODE関数が最初に戻す「SALARY*COMMISSION_PCT」が数値型なので、「NO COMMISSION」が数値に変換できないためエラーになります。』 と解説がありました。 正常に実行できるのは前段のもので後段はできないとのことなのですがどうしてかわかりません。 なぜ後段では数値型に変換する必要があるのか、前段では同じsalary*commission_pctが文字列として扱っているのかわかりません。 DECODE関数の DECODE(α、         β、γ          δ) αがβのときはγを戻し、それ以外のときはδを戻すという公式があると思いますが、 もしかしてγとδは同じ型でなければいけないというルールがあるのでしょうか。でもたとえそうだとしてもまだ解せない部分があるのですが・・・。ご教授どうかよろしくお願いいたします。これはオラクルブロンズSQLの参考書の模擬試験にあった問題になります。

  • 動的SQLでのDECODE

    動的SQLでのDECODEがうまくいかず困っています。 SELECT DECODE(A.ROWID,NULL,'0','1') FROM A WHERE A.CODE = 9999 の様な感じのSQLを発行しているのですが、 戻ってくるI変数は1、V変数の中身はNULLとなっています。 どなたか対処法をご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。 ちなみに、DECODE指定しないとROWIDはちゃんと取得できますので、 対処方法はあると言えばあるのですが。。。 動作環境 OS  :Red Hat Enterprise Linux AS release 3 Oracle:10g (10.1.0.2.0)

  • オラクルで、半角文字を全角に変換する関数、または逆の関数はありますでしょうか?

    オラクルで、検索用に全角/半角の変換をしたいのですが、そのような関数はありますでしょうか?

  • Accessの「IIF」に相当するSQL関数(ADOでOracleに接続時)

    Access2002からADO経由でOracleに接続し、データを取得しようと 思っています。 AccessのクエリやExcel関数では、「IIF」、「IF」で条件分岐が出 来ますが、SQLでこれに相当する関数はありますか? 具体的には、   ・日付A が 2007/08/01 ~ 本日 の間なら、「手配数」フィー ルドの数字を返す   ・日付Aが それ以外の期間なら、0 を返す というような事をしたいです。 DECODE関数がIF関数と似ているように思いますが、Between~And~ や、不等号での分岐が出来ないようなので困っています。 IIFやIF のように分岐条件を自由に設定できて、入れ子も出来るよ うな関数があれば教えてください。 よろしくお願いいたします!

  • DECODEの件

    こんにちわ。 いまORACLE9iを使用している者です。 SELECT句で"DECODE"を使って, ある項目の値がAとBの間にあるかどうか,という条件で 取得する値を切り替えたいと思い, 下記のようなSQLを書きましたが, エラーになってしまいます。 SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; PLSQLを使用しないで, このようなケースを実現したいのですが, どうすればよいでしょうか? 教えてください。 よろしくお願いします。

  • PHPの空白除去

    PHP5において 半角の前後空白を削除する関数trimは理解してます。 文字列中にある半角及び全角の空白を除去するには 文字列置換用の関数、例えばstr_replaceを使って置換すれば 全て空白を除去出来ます。 例: ---------------------------------- $string=" あ い う え お "; $all=" ";//全角スペース $half=" ";//半角スペース $no="";//削除用変数 $string=str_replace($all,$no,$string); $string=str_replace($half,$no,$string); ---------------------------------- 最後の2行を書けば置換が出来るのですが、問題はこの二つの関数をまとめてクラス化し、再利用したいと思っています。 クラスの作成方法及び使用方法がまだまだ理解していないので、困ってます。どなたかお力になって頂ければ幸いにございます。

    • ベストアンサー
    • PHP
  • SQL文の書き方教えてください。

    Oracle9i使用しています。 列名SURYOの値が0以上なら「+」以下なら「-」と結果に表示したいのですがどうすればいいのですか? 初心者なんで知ってる関数が少ないので知りうる関数で思いついたのはこれぐらいでした… DECODE(SURYO>0,'-','+') しかしだめでした。 SQLサーバーでいうIIF関数みたいなのってないのですか? よろしくお願いします。

  • ワードのワイルドカードを使った置換について

    ワードでワイルドカードを使って置換をしたいのですが、うまくいきません。 数字の前の全角スペースを半角スペースに変えたいのです。 置換でワイルドカードを使用するにチェックを入れ、 検索する文字列は「全角スペース[0-9]」 置換後の文字列は「半角スペース\1」 として実行してみたのですが、 〔置換後の文字列〕に指定できない範囲の番号が含まれています というメッセージが出ます。 全角スペース[0-9]はきちんと認識しているようで、検索まではうまくいっているようですが、 置換後の指定の仕方が悪いようなのです。 お教えいただければと思います。 よろしくお願いいたします。

  • SQL関数とレスポンスについて

    業務でJavaとDB(DB2)を使用しています。 最近、SQL関数を使用すべきか否かでちょっと悩んでいます。 SQL関数は確かに便利ですが、使いすぎるとレスポンスが悪くなる、ということはあるのでしょうか? 今はSQLは出来るだけシンプルにして、Javaで補っています。 (例えばGraphic項目から全角スペースを取り除く場合はSQL関数のRTRIMを使わず、DBから取り出した後にJavaで取り除く、など) ご指導よろしくお願いします。

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl