Независимая от базы данных конкатенация строк SQL в направляющих

Я хочу сделать конкатенацию строк стороны базы данных в запросе направляющих и сделать это независимым от базы данных способом.

SQL-92 указывает двойную черту (||) как оператор конкатенации. К сожалению, похоже, что SQL Server MS не поддерживает его; это использует + вместо этого.

Я предполагаю, что абстракция грамматики SQL направляющих уже решила определенную для дб проблему оператора. Если это действительно существует, как я использую его?

13
задан Juergen 14 May 2015 в 15:46
поделиться

2 ответа

У меня была та же проблема, и я так и не придумал ничего, что было бы встроено в 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, используя правильные функции или операторы для текущего адаптера. Может, я сам напишу.

10
ответ дан 2 December 2019 в 00:02
поделиться

Если вы хотите что-то нейтральное для Rails, вам нужно будет вернуть значения, которые вы хотите объединить, и сделать это после того, как данные будут доставлены в рельсы (или сделать это в рельсах, прежде чем указывать его в базу данных).

Похоже, что Mysql использует CONCAT (), Postgres ||, Oracle CONCAT () или ||, T-SQL +.

Любая рельсовая абстракция одного и того же должна иметь место в точке, где вы могли бы просто выполнять конкатенацию с использованием обычного Ruby, иначе я совершенно неправильно понял вопрос.

0
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: