Re: timestamps, formatting, and internals

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: timestamps, formatting, and internals
Дата
Msg-id 4FB7E97D.4080106@gmail.com
обсуждение исходный текст
Ответ на timestamps, formatting, and internals  (David Salisbury <salisbury@globe.gov>)
Список pgsql-general
On 05/19/2012 10:34 AM, David Salisbury wrote:

CCing the list.

>
>
> On 5/19/12 8:12 AM, Adrian Klaver wrote:

>
> I hope no one looks further into the problem as the case is closed. It
> was a coding
> problem and not a time matchup problem. Late Friday afternoons just
> aren't my most
> shining moments. ;)
>
> But I do still wonder... Is there a setting that I can set a default
> formatting of the date. If I do a "select timestamp '01-jan-2012'" I
> would want
> it to always return everything, down to the last microsecond. A "Give me
> everything!"
> setting without doing some to_char ugliness. It would just return..
>
> 01-jan-2012 00:00:00.000

<NOTE: A timestamp contains a date, but a date is not a
timestamp(actually it is one fixed at midnight). To avoid confusion you
might want to be specific what type of time you are working with.>

It will return what is provided:) In other words it depends on how the
timestamp field is set up. That is determined by the precision parameter
passed to the timezone type when creating or altering the field. As far
as ad-hoc timestamp as shown above the best you can do is change the
DateStyle but that only goes to two decimal places.:

test=# SET datestyle ='SQL';
SET
test=# SELECT timestamp '01-jan-2012';
       timestamp
---------------------
  01/01/2012 00:00:00
(1 row)

In either case it will return all significant digits:

test=# SELECT  '01-jan-2012 00:00:00.000012'::timestamp;
          timestamp
----------------------------
  2012-01-01 00:00:00.000012


>
>
> And conversely, is there a setting so that any time value will always be
> rounded to the second,
> shaving off the micro-seconds. So that select now(); would return, and
> store _internally_! ..
>
> 2012-05-19 11:25:12.000

Change the precision of the timestamp field to 0. See below:

test=# \d timestamp_test
            Table "public.timestamp_test"
  Column  |            Type             | Modifiers
---------+-----------------------------+-----------
  id      | integer                     | not null
  txt_fld | text                        |
  ts_fld  | timestamp with time zone    |
  ts_fld2 | timestamp(0) with time zone |
Indexes:
     "timestamp_test_pkey" PRIMARY KEY, btree (id)

test=# SELECT * from timestamp_test ;
  id | txt_fld |            ts_fld             |        ts_fld2
----+---------+-------------------------------+------------------------
   7 | test4   | 2009-12-24 13:37:32.499764-08 | 2009-12-24 13:37:32-08
   8 | t       | 2010-05-20 08:13:28.157027-07 | 2010-05-20 12:13:28-07
   9 | t       | 2010-05-20 08:13:43.265383-07 | 2010-05-20 10:13:43-07
  10 | t       | 2010-05-20 08:13:53.718519-07 | 2010-05-20 13:13:54-07
  11 | s       | 2011-03-25 09:00:00.124-07    | 2011-03-25 14:15:13-07
  12 | s       | 2011-03-25 09:12:00.124-07    | 2011-03-25 14:16:27-07

>
>
> Thanks for the reply and any help!
>
> -ds


--
Adrian Klaver
adrian.klaver@gmail.com

В списке pgsql-general по дате отправления:

Предыдущее
От: Chris Angelico
Дата:
Сообщение: IN vs equality (was Re: odd intermittent query hanging issue)
Следующее
От: Josh Kupershmidt
Дата:
Сообщение: Re: Why are pg_restore taking that long ?