Thread: select function alias
Howdy,
I've a series of timestamp columns I'd like to alias in select statements. psql indicates my alias doesnt exist after
I define it.
Example -> select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from impressionsdb where ymd like '2016-11%' ;
psql always complains column ymd does not exist. I've inherited a series of tables with many timestamps and would like to
shorten the select in queries without renaming any columns.
postgresql 9.2 on Gentoo 4.4.26
TIA, TRB
On 30/11/2016 13:42, Timoteo Blanco wrote:
Howdy,I've a series of timestamp columns I'd like to alias in select statements. psql indicates my alias doesnt exist afterI define it.Example -> select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from impressionsdb where ymd like '2016-11%' ;psql always complains column ymd does not exist. I've inherited a series of tables with many timestamps and would like toshorten the select in queries without renaming any columns.postgresql 9.2 on Gentoo 4.4.26TIA, TRB
3 options:
- Use the same to_char expression in the where clause
- Use a sub-select to use the alias in the outer where clause
- Use the original column in the where clause and use the timestamp comparisson functions.
Howard.
From: "Howard News" <howardnews@selestial.com>
Sent: Wednesday, November 30, 2016 9:03:28 AM
Subject: Re: [GENERAL] select function aliasOn 30/11/2016 13:42, Timoteo Blanco wrote:I've a series of timestamp columns I'd like to alias in select statements. psql indicates my alias doesnt exist after3 options:I define it.Example -> select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from impressionsdb where ymd like '2016-11%' ;psql always complains column ymd does not exist. I've inherited a series of tables with many timestamps and would like toshorten the select in queries without renaming any columns.
- Use the same to_char expression in the where clause
- Use a sub-select to use the alias in the outer where clause
- Use the original column in the where clause and use the timestamp comparisson functions.
4. Define views on the tables. Make the views writeable using rules.
5. Use a CTE:
with shortnames as (
select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from impressionsdb
) select ymd from shortnames where ymd like '2016-11%';
-- B
5. Use a CTE:with shortnames as (select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from impressionsdb ) select ymd from shortnames where ymd like '2016-11%';
Except that WHERE clause won't get pushed down (I think...haven't checked an explain recently) so a sub-select is definitely better in this scenario.
David J.
On Wed, Nov 30, 2016 at 12:15 PM, David G. Johnston <david.g.johnston@gmail.com> wrote: > On Wed, Nov 30, 2016 at 8:15 AM, btober@computer.org > <btober@broadstripe.net> wrote: >> >> 5. Use a CTE: >> >> with shortnames as ( >> select to_char(impressions_create_date,'yyyy-mm-dd') as ymd from >> impressionsdb >> ) select ymd from shortnames where ymd like '2016-11%'; >> > > Except that WHERE clause won't get pushed down (I think...haven't checked an > explain recently) so a sub-select is definitely better in this scenario. It's still the case FWICT. I suspect CTE optimization fencing is mostly considered a feature, not a bug. merlin