Estou usando o Postgres 9.5. Quero escrever uma ordem por expressão para uma série de strings concatenadas, mas não tenho certeza se isso é possível ou como fazê-lo. Eu montei o abaixo
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...
Mas como você pode ver, há um erro reclamando sobre a sintaxe. O que estou tentando fazer é possível e, em caso afirmativo, como escrevo uma ordem por cláusula com base em uma concatenação de colunas?
Há duas coisas que posso dizer aqui,
A solução:
","
é diferente de','
aspas simples é o mecanismo de aspas literais. Aspas duplas significam que a coluna nomeada,
é perfeitamente válida, por mais horrível que seja na práticaCREATE TABLE foo ("," int);
O problema maior: por que concatenar as strings? Ele só pode retardar isso ou perder a precisão. Você pode ordenar por mais de uma coluna; basta fazer isso..