Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 1973971

Browse files
committed
Per a brief conversation with Tom, I've created a patch for adding
support for 'week' within the date_trunc function. Within the patch I added a couple of test cases and associated target output, and changed the documentation to add 'week' appropriately. Robert Creager
1 parent 44611f6 commit 1973971

File tree

6 files changed

+35
-4
lines changed

6 files changed

+35
-4
lines changed

doc/src/sgml/func.sgml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.190 2004/03/04 20:09:29 dennis Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.191 2004/03/05 02:41:14 momjian Exp $
33
PostgreSQL documentation
44
-->
55

@@ -5309,6 +5309,7 @@ date_trunc('<replaceable>field</replaceable>', <replaceable>source</replaceable>
53095309
<member><literal>minute</literal></member>
53105310
<member><literal>hour</literal></member>
53115311
<member><literal>day</literal></member>
5312+
<member><literal>week</literal></member>
53125313
<member><literal>month</literal></member>
53135314
<member><literal>year</literal></member>
53145315
<member><literal>decade</literal></member>

src/backend/utils/adt/timestamp.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.99 2004/02/14 20:16:17 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.100 2004/03/05 02:41:14 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -2564,6 +2564,13 @@ timestamp_trunc(PG_FUNCTION_ARGS)
25642564

25652565
switch (val)
25662566
{
2567+
case DTK_WEEK:
2568+
isoweek2date( date2isoweek( tm->tm_year, tm->tm_mon, tm->tm_mday ), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday) );
2569+
tm->tm_hour = 0;
2570+
tm->tm_min = 0;
2571+
tm->tm_sec = 0;
2572+
fsec = 0;
2573+
break;
25672574
case DTK_MILLENNIUM:
25682575
tm->tm_year = (tm->tm_year / 1000) * 1000;
25692576
case DTK_CENTURY:
@@ -2672,6 +2679,13 @@ timestamptz_trunc(PG_FUNCTION_ARGS)
26722679

26732680
switch (val)
26742681
{
2682+
case DTK_WEEK:
2683+
isoweek2date( date2isoweek( tm->tm_year, tm->tm_mon, tm->tm_mday ), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday) );
2684+
tm->tm_hour = 0;
2685+
tm->tm_min = 0;
2686+
tm->tm_sec = 0;
2687+
fsec = 0;
2688+
break;
26752689
case DTK_MILLENNIUM:
26762690
tm->tm_year = (tm->tm_year / 1000) * 1000;
26772691
case DTK_CENTURY:

src/test/regress/expected/timestamp.out

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,12 @@ SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
499499
| @ 1460 days 17 hours 32 mins 1 sec
500500
(54 rows)
501501

502+
SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp '2004-02-29 15:44:17.71393' ) AS week_trunc;
503+
date_trunc_week | week_trunc
504+
-----------------+--------------------------
505+
| Mon Feb 23 00:00:00 2004
506+
(1 row)
507+
502508
-- Test casting within a BETWEEN qualifier
503509
SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
504510
FROM TIMESTAMP_TBL

src/test/regress/expected/timestamptz.out

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,12 @@ SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
494494
| @ 1460 days 17 hours 32 mins 1 sec
495495
(54 rows)
496496

497+
SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp with time zone '2004-02-29 15:44:17.71393' ) AS week_trunc;
498+
date_trunc_week | week_trunc
499+
-----------------+------------------------------
500+
| Mon Feb 23 00:00:00 2004 PST
501+
(1 row)
502+
497503
-- Test casting within a BETWEEN qualifier
498504
SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
499505
FROM TIMESTAMPTZ_TBL
@@ -1317,9 +1323,9 @@ SELECT '' AS to_char_9, to_char(d1, 'YYYY A.D. YYYY a.d. YYYY bc HH:MI:SS P.M. H
13171323
| 2001 A.D. 2001 a.d. 2001 ad 05:32:01 P.M. 05:32:01 p.m. 05:32:01 pm
13181324
(64 rows)
13191325

1320-
SELECT '' AS to_char_10, to_char(d1, 'YYYY WW IYYY IYY IY I IW')
1326+
SELECT '' AS to_char_10, to_char(d1, 'YYYY WW IYYY IYY IY I IW')
13211327
FROM TIMESTAMPTZ_TBL;
1322-
to_char_10 | to_char
1328+
to_char_10 | to_char
13231329
------------+--------------------------
13241330
|
13251331
|

src/test/regress/sql/timestamp.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ SELECT '' AS "49", d1 FROM TIMESTAMP_TBL
151151
SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
152152
FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
153153

154+
SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp '2004-02-29 15:44:17.71393' ) AS week_trunc;
155+
154156
-- Test casting within a BETWEEN qualifier
155157
SELECT '' AS "54", d1 - timestamp without time zone '1997-01-02' AS diff
156158
FROM TIMESTAMP_TBL

src/test/regress/sql/timestamptz.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ SELECT '' AS "49", d1 FROM TIMESTAMPTZ_TBL
145145
SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
146146
FROM TIMESTAMPTZ_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
147147

148+
SELECT '' AS date_trunc_week, date_trunc( 'week', timestamp with time zone '2004-02-29 15:44:17.71393' ) AS week_trunc;
149+
148150
-- Test casting within a BETWEEN qualifier
149151
SELECT '' AS "54", d1 - timestamp with time zone '1997-01-02' AS diff
150152
FROM TIMESTAMPTZ_TBL

0 commit comments

Comments
 (0)