railsで各RDBMSの文字列連結に対応させる

問題点

sqliteでは問題なく動作するのに、mysqlで実行すると検索結果が0件になる。

問題のSQL

SELECT "users".*
FROM "users"
  INNER JOIN "profiles"
  ON ("profiles"."user_id" = "users"."id")
WHERE (last_name || first_name LIKE '%井川%')
ORDER BY created_at desc

原因

どうやらMysqlでは文字連結に「||」は使用できないらしい。
concatで文字連結する必要があるようだ。
concat( last_name, first_name ) LIKE ‘%井川%’

ただし、次のように変更すると、sqliteで実行するとエラーになる。 あ~困った!!

対応内容

Mysql,sqlite,oracle,sqlServerすべてに対応するため、次のように修正してみる。

config/initializers/配下に、次のファイルを配備

comments powered by Disqus