MicroSoft SQL Serverのライセンス切れなどにより、他のDBにサービスを移行することがある。
他のDBに乗り換えを考えた時に、候補に上がるのはMySQLが多いと考えられる。
本記事では、MS SQLからMySQLへ書き換えを行うときに気をつけるポイントを5つ3つまとめた。
1. GETDATE()
現在の日付を基準に検索を行うことは多々ある。
MS SQLではGETDATE()で現在の日時を取得している。
MySQLではNOW()で取得できる。
例えば、本のDBで出版されている本(=出版日時が現時刻より前)のものを取得する場合
MS SQL
SELECT
title,
auther,
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= GETDATE()
MySQL
SELECT
title,
auther,
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= NOW()
2.文字列結合
SELECT してきたものにprefixとして何か付けたい場合に文字列結合を使うことがある。
例えばSQLだと、
SQL Server
SELECT
'本のタイトル:'+title,
'著者:'+auther,
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= GETDATE()
のように+で文字列結合ができる。
MySQLの場合はCONCATを使う必要がある。
MySQL
SELECT
CONCAT('本のタイトル:', title),
CONCAT('著者:', auther),
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= NOW()
3. 行数のNUM_ROWS
SQLでは、取得した結果が何行目かをNUM_ROWSを使うことで取得ができる。
SQL Server
SELECT
NUMROWS,
'本のタイトル:'+title,
'著者:'+auther,
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= GETDATE()
MySQLには組み込み関数がない。
しかたがないためMySQLのユーザ定義変数を使用する。
例えば
MySQL
set @row_number:=0;
SELECT
(@row_number:=@row_number + 1) AS row_number,
'本のタイトル:'+title,
'著者:'+auther,
publisher,
price,
published_datetime,
created_datetime,
modified_datetime
FROM
books
WHERE
published_datetime <= NOW()
のようにユーザ定義変数を使用するとrow_numberが増加していき、行数と同じになる。