2016-05-11 20 views
0

Oracle(PLSQL)のコードをSQL Server 2012データベースで使用するよう変換しようとしています。 Oracle NVL 2関数を変換しています。 isNULLは2つの引数を必要とするSQL状態でエラーが発生します。OracleコードをTSQLに変換

オラクル私が変換しようとしているは、次のとおりです。

CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
     THEN Nvl2(d.phonearea,To_Char(d.phonearea)||'/','')||' '||SubStr(To_Char(d.phonenbr),1,3)||'-'||SubStr(d.phonenbr,-4) 

次のように私は、SQLのために変更した:

CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
     THEN ISNULL((d.phonearea,CAST(d.phonearea AS char)+'/','')+' '+SubString(CAST(d.phonenbr AS char),1,3)+'-'+SubString(d.phonenbr,-4)) 

私は何をしないのですか?

答えて

0

OracleのNVL2(expr1, expr2, expr3は、私はこれが何をしたいと思い標準SQLのCASE WHEN expr1 IS NOT NULL THEN expr2 ELSE expr3 END

CASE WHEN LTrim(Rtrim(appointtype1)) in ('PRO','NOA') 
     THEN CASE WHEN d.phonearea IS NOT NULL 
       THEN To_Char(d.phonearea)||'/' 
       ELSE '' 
      END ||' '||SubStr(To_Char(d.phonenbr),1,3)||'-'||SubStr(d.phonenbr,-4) 
... 
0

に変換されます。 。 。あるいは少なくとも近い:

(CASE WHEN LTrim(Rtrim(appointtype1)) IN ('PRO', 'NOA') 
     THEN COALESCE(d.phonearea + '/', '') + STUFF(d.phonenbr, 3, 0, '-') 
END) 

注:

  • これはphoneareaと​​が文字列ではなく数値(文字列のような値を格納することは、とにかく良い習慣である)であることを前提としています。
  • 数字の場合は、CAST()またはCONVERT()を使用します。ただし、VARCHAR()の長さを含めることを忘れないでください。 SQL Serverの長さはデフォルトでVARCHAR()であり、既定の長さには依存したくありません。
  • STUFF()関数を使用して、電話番号の3文字目の後にハイフンを挿入できます。私はこれがあなたの意図する論理だと思う。
  • ケーシングに注意する必要があります。ほとんどの文字列操作ではSQL Server(デフォルト)は大文字と小文字を区別しませんが、Oracleは大文字と小文字を区別しませ