30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【MySQL】DBをOracleからMySQLへ移行する件について ~その3~

成り行きでOracleMySQL
移行してみたときの話の続き


TO_CHAR関数⇒DATE_FORMAT関数


Oracleで使われているTO_CHAR関数
MySQLには存在しないので
DATE_FORMAT関数をつかう


例えば日付を8ケタで格納したい場合

20200205


Oracle

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;


MySQL

select DATE_FORMAT(now(),'%Y%m%d');




ビューなんかで使われているSQL
書き換えるだけの対応で済むので
他のややこしいのに比べるとわかりやすい




SQLの外部結合の書き方


Oracleでは↓の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でも同じものが使えるよう
通化されているといいなぁと
思ったり思わなかったり