Re: to_char WW

From: Karel Zak <zakkr(at)zf(dot)jcu(dot)cz>
To: gravity(at)dds(dot)nl
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: to_char WW
Date: 2001-01-15 11:00:53
Message-ID: Pine.LNX.3.96.1010115112029.23470A-100000@ara.zf.jcu.cz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On Sun, 14 Jan 2001, gravity wrote:

> Karl,
>
> you implemented to_char if I'm not mistaken.
>
> May I ask how you got to the algorithm for WW (weeknumber of the year) and why?
>
> eg:
> znc=# select to_char(now(),'DD-MM-YYYY HH24:MI "week" WW');
> to_char
> --------------------------
> 14-01-2001 01:11 week 03
> (1 row)
>
> and I was thinking that sun 14 jan 2001 would be weeknumber 2

Not sure, see:

$ cal 1 2001

January 2001
S M Tu W Th F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
^^^^^^^
Is it 3th or 2nd line? :-)

21 22 23 24 25 26 27
28 29 30 31

But better explain of this FAQ's question (and for others in
-generaly list):

First, in PG < 7.1 is not stuff of "week" too much correct, in 7.1 it's
better. Following is for 7.1...

Docs:

W
- week of month (1-5) where first week start on the first day of the
month

WW
- week number of year (1-53) where first week start on the first day
of the year

IW
- ISO week number of year (The first Thursday of the new year is in
week 1.)

As you can see in 7.1 is IW that is more "human" than WW.

Examples:

select to_char('01-01-2001'::timestamp,
'DD-MM-YYYY FMDay, "week:" WW, "iso-week:" IW');
to_char
-------------------------------------------
01-01-2001 Monday, week: 01, iso-week: 01

The year 2001 is not good example for show diff between ISO and WW,
2000 is better because year start after Thursday.

select to_char('01-01-2000'::timestamp, 'DD-MM-YYYY FMDay, "week:" WW,
"iso-week:" IW');
to_char
---------------------------------------------
01-01-2000 Saturday, week: 01, iso-week: 52

test=# select to_char('07-01-2000'::timestamp, 'DD-MM-YYYY FMDay, "week:"
WW, "iso-week:" IW');
to_char
-------------------------------------------
07-01-2000 Friday, week: 01, iso-week: 01
(1 row)

test=# select to_char('08-01-2000'::timestamp, 'DD-MM-YYYY FMDay, "week:"
WW, "iso-week:" IW');
to_char
---------------------------------------------
08-01-2000 Saturday, week: 02, iso-week: 01

Here (last two examples) is good transparent how week break to next week.

'WW' counts weeks directly as ('day-of-year' -1) / 7 + 1

'IW' not counts weeks directly from 'day-of-year' but correct this value
by first week of year, where first week of year is week with Thursday.

- IW is like typical paper calendar (probably:-), but in some countries
(like Czech Rep. where I live) people use weeks as Mon->Sun and not
as more standard Sun->San. But ISO is clear for this.

Karel

Browse pgsql-general by date

  From Date Subject
Next Message Francisco Eriko Barreto Brito 2001-01-15 11:35:50 Help - VACUMM
Previous Message Marcos 2001-01-15 10:58:28 exporting table to txt