一尘不染

Rails中与数据库无关的SQL字符串串联

sql

我想在Rails查询中执行数据库端字符串连接,并以与数据库无关的方式进行。

SQL-92将双引号(||)指定为串联运算符。不幸的是,MS SQL Server似乎不支持它。它使用+代替。

我猜想Rails的SQL语法抽象已经解决了特定于数据库的运算符问题。如果确实存在,该如何使用?


阅读 148

收藏
2021-05-05

共1个答案

一尘不染

我遇到了同样的问题,却从未想到过Rails内置的任何东西。所以我写了这个小方法。

# Symbols should be used for field names, everything else will be quoted as a string
def db_concat(*args)

  adapter = configurations[RAILS_ENV]['adapter'].to_sym
  args.map!{ |arg| arg.class==Symbol ? arg.to_s : "'#{arg}'" }

  case adapter
    when :mysql
      "CONCAT(#{args.join(',')})"
    when :sqlserver
      args.join('+')
    else
      args.join('||')
  end

end

我在想有人真的应该编写某种SQL帮助程序插件,该插件可以使用当前适配器的正确函数或运算符来自动格式化简单的SQL表达式。也许我自己写一个。

2021-05-05