【MySQL】DBをOracleからMySQLへ移行する件について ~その3~
成り行きでOracleをMySQLに
移行してみたときの話の続き
TO_CHAR関数⇒DATE_FORMAT関数
Oracleで使われているTO_CHAR関数
MySQLには存在しないので
DATE_FORMAT関数をつかう
例えば日付を8ケタで格納したい場合
20200205
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
select DATE_FORMAT(now(),'%Y%m%d');
ビューなんかで使われているSQLを
書き換えるだけの対応で済むので
他のややこしいのに比べるとわかりやすい
SQLの外部結合の書き方
SELECT A.NO, A.NAME, B.NAME FROM TABLE1 A, TABLE2 B WHERE A.NO = B.NO (+)
↓と同じ意味
SELECT A.NO, A.NAME, B.NAME FROM TABLE1 A LEFT OUTER JOIN TABLE2 B ON A.NO = B.NO
上の(+)を使った分は
MySQLで使えないので
これが使われていた場合には
下の分に書き換える必要がある
なんとなく今は主流じゃない
古くさい書き方なのかなぁ、と
感じていたけど
LEFT JOIN等の書き方は
Oracle9iからサポートされたらしい
納得
DECODE関数のエンコード
またもやOracleでは使えるけど
MySQLでは使えない関数 DECODE
DECODE( COLUMN, '1', 'A', 'B' )
CLUMNの値が1ならA、それ以外ならCを返す
という意味
幸いにもこのケースでは
単純に条件分岐が1つだけなので
MySQLでは
if(column=1,'a','b')
と、シンプルに再現できる
条件分岐が複数だと
CASE文で対応するのが妥当だろうか
それぞれのDBには
それぞれの生い立ちがあるだろうから
使用できる関数等がちがうのも
理解はできるけど
どのDBでも同じものが使えるよう
共通化されているといいなぁと
思ったり思わなかったり