思考停止するな

ネットワークとかアプリケーションとかWebとか

OracleとSQLServerの違いまとめ

スポンサーリンク

OracleSQLServerの仕様やSQLや関数(構文)の違いについてのまとめです。
最近OracleSQLServerSQLの違いに苦しめられることが多かったので違い(相違点)を一覧にしてまとめておこうと思いました。
クエリがだいぶ違うし、仕様も動作も違うしで以外に相違点が多いことに気がつきました。
今後もどんどん追加していきます。

OracleSQLServerの違い一覧

項目 Oracle SQLServer 備考
空文字の扱い 空文字 ≒ Null 空文字 ≠ Null OracleはNullと空文字が同じと判断され、SQLServerではNullと空文字は区別される
条件制御 DECODE CASE WHEN END
文字列の結合 ll +
システム日付 SYSDATE GETDATE()
文字型→日付型変換 TO_DATE CONVERT
日付型→文字型変換 TO_CHAR CONVERT
数値→文字列変換 TO_NUMBER CONVERT
NULL以外 NVL ISNULL
空白除去 TRIM LTRIM(RTRIM())
部分文字列を取り出し SUBSTR SUBSTRING
長さを取得 LENGTH LEN,DATALENGTH OracleのLENGTH関数は自動的に補完される後続のスペースも長さとしてカウントされる。SQLServerのLEN関数は指定された文字列式の、末尾の空白を除いた文字数を返す。
副問い合わせ 無名表許可 無名表無許可(別名をつけないといけない)
行数取得 ROWNUM ROW_NUMBER() OVER(ORDER BY 列名 DESC) rownum
日付の加算 ADD_MONTHS DATEADD
文字の置き換え REPLACE STUFF
NULLのソート順 昇順で、Null値は最後に配置 昇順で、Null値は先頭に配置 NULLを最後に並べる方法
ORDER BY
CASE WHEN 列名 IS NULL THEN 0 ELSE 1 END DESC
,列名
DELETEの削除対象のテーブル名 別名をつけられる 別名をつけられない
USING句における結合 できる できない SQLServerの場合は1つ1つJOINを書く
階層問い合わせ start with句、connect by句 WITH句
where in where (列名, 列名, 列名) in (値, 値, 値) where (列名+列名+列名) in (値+値+値) SQL Serverでは複数に対応できないので、1つにまとめてあげる
サブクエリ中でORDER BY できる できない SQL Serverではサブクエリ中でORDER BYが使用できない
JOIN時のテーブル別名 必要ない 必要
だいぶ主要なところは調べられた感じがする。