Search Postgresql Archives

Re: cross-database time extract?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2009/12/29 Adrian Klaver <aklaver@xxxxxxxxxxx>:
> On Tuesday 29 December 2009 5:01:03 am Osvaldo Kussama wrote:
>> 2009/12/24 Israel Brewster <israel@xxxxxxxxxxxxxxxxxx>:
>> > This is sort of a PostgreSQL question/sort of a general SQL question, so
>> > I apologize if this isn't the best place to ask. At any rate, I know in
>> > PostgreSQL you can issue a command like 'SELECT "time"(timestamp_column)
>> > from table_name' to get the time part of a timestamp. The problem is that
>> > this command for some reason requires quotes around the "time" function
>> > name, which breaks the command when used in SQLite (I don't know about
>> > MySQL yet, but I suspect the same would be true there). The program I am
>> > working on is designed to work with all three types of databases (SQLite,
>> > PostgreSQL, and MySQL) so it would be nice (save me some programing) if
>> > there was a single SQL statement to get the time portion of a timestamp
>> > that would work with all three. Is there such a beast? On a related note,
>> > why do we need the quotes around "time" for the function to work in
>> > PostgreSQL? the date function doesn't need them, so I know it's not just
>> > a general PostgreSQL formating difference. Thanks :)
>> > -----------------------------------------------
>>
>> It's a bug?
>>
>> bdteste=# SELECT time(CURRENT_TIMESTAMP);
>> ERRO:  erro de sintaxe em ou próximo a "CURRENT_TIMESTAMP"
>> LINE 1: SELECT time(CURRENT_TIMESTAMP);
>>                     ^
>> bdteste=# SELECT pg_catalog.time(CURRENT_TIMESTAMP);
>>       time
>> -----------------
>>  10:55:07.073911
>> (1 registro)
>>
>> bdteste=# SELECT "time"(CURRENT_TIMESTAMP);
>>       time
>> -----------------
>>  10:55:20.679684
>> (1 registro)
>>
>> bdteste=# SELECT $$time$$(CURRENT_TIMESTAMP);
>> ERRO:  erro de sintaxe em ou próximo a "("
>> LINE 1: SELECT $$time$$(CURRENT_TIMESTAMP);
>>                        ^
>>
>> Osvaldo
>
> It is documented behavior.
>
> To quote from here:
> http://www.postgresql.org/docs/8.4/interactive/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS
>
> " It is also possible to specify a type cast using a function-like syntax:
>
> typename ( expression )
>
> However, this only works for types whose names are also valid as function names.
> For example, double precision cannot be used this way, but the equivalent
> float8 can. Also, the names interval, time, and timestamp can only be used in
> this fashion if they are double-quoted, because of syntactic conflicts.
> Therefore, the use of the function-like cast syntax leads to inconsistencies
> and should probably be avoided.
>
>    Note: The function-like syntax is in fact just a function call. When one of
> the two standard cast syntaxes is used to do a run-time conversion, it will
> internally invoke a registered function to perform the conversion. By
> convention, these conversion functions have the same name as their output type,
> and thus the "function-like syntax" is nothing more than a direct invocation of
> the underlying conversion function. Obviously, this is not something that a
> portable application should rely on. For further details see CREATE CAST. "
>


Adrian and Alvaro, thanks for explanation.

Osvaldo

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux