mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Add "isodow" option to EXTRACT() and date_part() where Sunday = 7.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.176 2007/02/16 03:39:45 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.177 2007/02/19 17:41:39 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -125,6 +125,7 @@ static const datetkn datetktbl[] = {
|
||||
{"h", UNITS, DTK_HOUR}, /* "hour" */
|
||||
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
|
||||
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
|
||||
{"isodow", RESERV, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */
|
||||
{"isoyear", UNITS, DTK_ISOYEAR}, /* year in terms of the ISO week date */
|
||||
{"j", UNITS, DTK_JULIAN},
|
||||
{"jan", MONTH, 1},
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.172 2007/02/16 03:39:45 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.173 2007/02/19 17:41:39 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -4112,11 +4112,14 @@ timestamp_part(PG_FUNCTION_ARGS)
|
||||
break;
|
||||
}
|
||||
case DTK_DOW:
|
||||
case DTK_ISODOW:
|
||||
if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
|
||||
if (val == DTK_ISODOW && result == 0)
|
||||
result = 7;
|
||||
break;
|
||||
|
||||
case DTK_DOY:
|
||||
@ -4322,11 +4325,14 @@ timestamptz_part(PG_FUNCTION_ARGS)
|
||||
break;
|
||||
|
||||
case DTK_DOW:
|
||||
case DTK_ISODOW:
|
||||
if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn, NULL) != 0)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
|
||||
if (val == DTK_ISODOW && result == 0)
|
||||
result = 7;
|
||||
break;
|
||||
|
||||
case DTK_DOY:
|
||||
|
@ -9,7 +9,7 @@
|
||||
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/utils/datetime.h,v 1.64 2007/02/16 03:39:45 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/include/utils/datetime.h,v 1.65 2007/02/19 17:41:39 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -166,6 +166,7 @@
|
||||
#define DTK_TZ_HOUR 34
|
||||
#define DTK_TZ_MINUTE 35
|
||||
#define DTK_ISOYEAR 36
|
||||
#define DTK_ISODOW 37
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt.h,v 1.35 2007/02/16 03:39:45 momjian Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt.h,v 1.36 2007/02/19 17:41:39 momjian Exp $ */
|
||||
|
||||
#ifndef DT_H
|
||||
#define DT_H
|
||||
@ -158,6 +158,7 @@ typedef double fsec_t;
|
||||
#define DTK_TZ_HOUR 34
|
||||
#define DTK_TZ_MINUTE 35
|
||||
#define DTK_ISOYEAR 36
|
||||
#define DTK_ISODOW 37
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt_common.c,v 1.36 2006/09/26 07:56:56 meskes Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/dt_common.c,v 1.37 2007/02/19 17:41:39 momjian Exp $ */
|
||||
|
||||
#include "postgres_fe.h"
|
||||
|
||||
@ -214,6 +214,7 @@ static datetkn datetktbl[] = {
|
||||
{"irkst", DTZ, POS(36)}, /* Irkutsk Summer Time */
|
||||
{"irkt", TZ, POS(32)}, /* Irkutsk Time */
|
||||
{"irt", TZ, POS(14)}, /* Iran Time */
|
||||
{"isodow", RESERV, DTK_ISODOW}, /* ISO day of week, Sunday == 7 */
|
||||
#if 0
|
||||
isst
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user