Dav*_*ave 3 postgresql order-by concat postgresql-9.5
我正在使用 Postgres 9.5。我想为一系列连接的字符串编写一个 order by 表达式,但我不确定这是否可能或如何做到。我拼凑了以下内容
myproject=> SELECT "my_objects".*
FROM "my_objects"
left join addresses on my_objects.address_id = addresses.id
WHERE (my_objects.name ILIKE '%my_object%'
AND EXISTS (SELECT *
FROM my_object_times
WHERE my_object_times.my_object_id = my_objects.id))
order by lower(addresses.city) || "," || addresses.state_id;
ERROR: column "," does not exist
LINE 1: ...id = my_objects.id)) order by lower(addresses.city) || "," || add...
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,有一个错误抱怨语法。我正在尝试做的事情是否可能,如果可以的话,我如何编写基于列串联的 order by 子句?
在这里我可以说两件事,
解决办法:","与','单引号不同的是字面引号机制。双引号表示指定的列,完全有效,但在实践中可能会很糟糕CREATE TABLE foo ("," int);
-- Identifier quoting
order by lower(addresses.city) || "," || addresses.state_id;
-- Literal quoting
order by lower(addresses.city) || ',' || addresses.state_id;
Run Code Online (Sandbox Code Playgroud)更大的问题:为什么要连接字符串?它只能减慢速度或失去准确性。您可以按多栏排序;就这样做..
order by lower(addresses.city), addresses.state_id;
Run Code Online (Sandbox Code Playgroud)