2013-08-09 2 views
1

Предположим, я хочу, чтобы проверить некоторые string выглядит как name - surname в конкатенации двух строк name и surname из в table. Как написать этот sql в стиле рельсов? Правильны ли эти синтаксисы?concatening строки в стиле рельсы

SELECT (name + '-'+ surname) FROM table1 where (name + '-'+ surname = string) 


table.select(:name+'-'+:surname).where((:name+'-'+:surname) == string) 
+1

Я не уверен, что понял, но, возможно, это выполнит эту задачу: 'YouModel.select ('(name +" - "+ surname) AS computed_name'). Where ('computed_name =?', 'My-string -to-test ') ' – MrYoshiji

+0

ОК, это именно то, что я ищу, не могли бы вы назвать его ответом, чтобы я мог его проверить! – user1611830

+0

Я написал ответ! – MrYoshiji

ответ

2

Я не уверен, правильно ли я понимаю ваш вопрос, но я думаю, что это то, чего вы хотите. Для следующей переменной строки,

string = "John - Doe" 

вы хотите, чтобы вытащить запись, как это из-за стола пользователя

ид | имя | sur_name

1 | Джон | Doe

Если это то, что вы хотите, вы можете массировать строковую переменную как этот

parsed_string = string.split('-') 
name = parsed_string[0].strip # strip to remove white spaces 
sur_name = parse_string[1].strip 

Затем вы можете запустить следующий код, чтобы получить то, что вы хотите:

users = User.where(:name => name, :surname => sur_name) 

Надежда это отвечает на ваш вопрос.

+0

Кстати, это не вопрос Rails. Но, я ответил Rails. :) –

+0

это он, но я хотел иметь один SQL-запрос без разделения на строку. Спасибо в любом случае – user1611830

+2

Я не уверен, что размер вашей таблицы, но вычисление на db во время запроса может стать очень дорогостоящим. Если запрос выполняет полное сканирование таблицы, и он должен вычислять (например, объединять два значения столбца), это будет проблематичным даже для самого большого RBMS. –