Вы можете получить это довольно легко, просто захватите индекс, если первый знак процента, а затем используйте этот индекс, чтобы найти первое место оттуда:
var start = myString.IndexOf("%");
var spaceIndex = myString.IndexOf(" ", start)
, конечно, значение myString - это строку, представленную в вашем вопросе.
Используйте QueryBuider для создания запроса для ActiveDataProvider и используйте «Объединение» и псевдонимы полей для результатов объединения из разных таблиц с одинаковыми именами, например так: