所以我想准备一个列表放入带有laravel的组合框中,我想使用连接来连接3列的值,我可以用这个实现它
public function deviList() {
return Device::select(DB::raw('CONCAT(DESC, OS, OS_V) AS FullDesc'), 'DEVI_ID')
->where('STATUS', 2)
->orderBy('DESC')
->lists('FullDesc', 'DEVI_ID');
}
然而,最好有一个空格或斜线来分隔列的值,所以我这样做,就像有些人在其他地方推荐的那样:
public function deviList() {
return Device::select(DB::raw('CONCAT(DESC," ",OS," ",OS_V) AS FullDesc'), 'DEVI_ID')
->where('STATUS', 2)
->orderBy('DESC')
->lists('FullDesc', 'DEVI_ID');
}
但是我收到错误说 SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的列名''(所以我猜不像示例在其他地方,这些分色被读作好像它们是列?)那么如何连接某种分离呢?
答案 0 :(得分:4)
如果您的SQL Server已启用QUOTED_IDENTIFIER
,则双引号将用于标识对象,而不是字符串文字。在这种情况下," "
不是表示空格的字符串,它将是由空格表示的对象(列),它不存在。
尝试在SQL语句中切换引号:
public function deviList() {
return Device::select(DB::raw("CONCAT(DESC,' ',OS,' ',OS_V) AS FullDesc"), 'DEVI_ID')
->where('STATUS', 2)
->orderBy('DESC')
->lists('FullDesc', 'DEVI_ID');
}
QUOTED_IDENTIFIER
docs here。
答案 1 :(得分:0)
自从我使用SQL Server以来已经有一段时间了,但从我记得的情况来看,没有CONCAT
功能可用。相反,你使用这样的东西:
SELECT (COALESCE(col1, '') + '' + COALESCE(col2, '')) AS col3 FROM ...
我认为你可以使用它,如果你的查询:
public function deviList() {
return Device::select(DB::raw('(COALESCE(DESC, "") + " " + COALESCE(OS, "") + " " (COALESCE(OS_V, "")) AS FullDesc'), 'DEVI_ID')
->where('STATUS', 2)
->orderBy('DESC')
->lists('FullDesc', 'DEVI_ID');
}
不幸的是,我无法对此进行测试,但它应该做的是,使用COALESCE()
检查列是否为空,然后将其与之间的空格连接,然后将其别名为FullDesc
以后用。
希望这会奏效。