Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit84df54b

Browse files
committed
Constructors for interval, timestamp, timestamptz
Author: Pavel Stěhule, editorialized somewhat by Álvaro HerreraReviewed-by: Tomáš Vondra, Marko TiikkajaWith input from Fabrízio de Royes Mello, Jim Nasby
1 parentaf2543e commit84df54b

File tree

14 files changed

+590
-4
lines changed

14 files changed

+590
-4
lines changed

‎doc/src/sgml/func.sgml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6720,6 +6720,32 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
67206720
<entry><literal>2013-07-15</literal></entry>
67216721
</row>
67226722

6723+
<row>
6724+
<entry>
6725+
<indexterm>
6726+
<primary>make_interval</primary>
6727+
</indexterm>
6728+
<literal>
6729+
<function>
6730+
make_interval(<parameter>years</parameter> <type>int</type> DEFAULT 0,
6731+
<parameter>months</parameter> <type>int</type> DEFAULT 0,
6732+
<parameter>weeks</parameter> <type>int</type> DEFAULT 0,
6733+
<parameter>days</parameter> <type>int</type> DEFAULT 0,
6734+
<parameter>hours</parameter> <type>int</type> DEFAULT 0,
6735+
<parameter>mins</parameter> <type>int</type> DEFAULT 0,
6736+
<parameter>secs</parameter> <type>double precision</type> DEFAULT 0.0)
6737+
</function>
6738+
</literal>
6739+
</entry>
6740+
<entry><type>interval</type></entry>
6741+
<entry>
6742+
Create interval from years, months, weeks, days, hours, minutes and
6743+
seconds fields
6744+
</entry>
6745+
<entry><literal>make_interval(days := 10)</literal></entry>
6746+
<entry><literal>10 days</literal></entry>
6747+
</row>
6748+
67236749
<row>
67246750
<entry>
67256751
<indexterm>
@@ -6741,6 +6767,57 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
67416767
<entry><literal>08:15:23.5</literal></entry>
67426768
</row>
67436769

6770+
<row>
6771+
<entry>
6772+
<indexterm>
6773+
<primary>make_timestamp</primary>
6774+
</indexterm>
6775+
<literal>
6776+
<function>
6777+
make_timestamp(<parameter>year</parameter> <type>int</type>,
6778+
<parameter>month</parameter> <type>int</type>,
6779+
<parameter>day</parameter> <type>int</type>,
6780+
<parameter>hour</parameter> <type>int</type>,
6781+
<parameter>min</parameter> <type>int</type>,
6782+
<parameter>sec</parameter> <type>double precision</type>)
6783+
</function>
6784+
</literal>
6785+
</entry>
6786+
<entry><type>timestamp</type></entry>
6787+
<entry>
6788+
Create timestamp from year, month, day, hour, minute and seconds fields
6789+
</entry>
6790+
<entry><literal>make_timestamp(1-23, 7, 15, 8, 15, 23.5)</literal></entry>
6791+
<entry><literal>2013-07-15 08:15:23.5</literal></entry>
6792+
</row>
6793+
6794+
<row>
6795+
<entry>
6796+
<indexterm>
6797+
<primary>make_timestamptz</primary>
6798+
</indexterm>
6799+
<literal>
6800+
<function>
6801+
make_timestamptz(<parameter>year</parameter> <type>int</type>,
6802+
<parameter>month</parameter> <type>int</type>,
6803+
<parameter>day</parameter> <type>int</type>,
6804+
<parameter>hour</parameter> <type>int</type>,
6805+
<parameter>min</parameter> <type>int</type>,
6806+
<parameter>sec</parameter> <type>double precision</type>,
6807+
<optional> <parameter>timezone</parameter> <type>text</type> </optional>)
6808+
</function>
6809+
</literal>
6810+
</entry>
6811+
<entry><type>timestamp with time zone</type></entry>
6812+
<entry>
6813+
Create timestamp with time zone from year, month, day, hour, minute
6814+
and seconds fields. When <parameter>timezone</parameter> is not specified,
6815+
then current time zone is used.
6816+
</entry>
6817+
<entry><literal>make_timestamp(1-23, 7, 15, 8, 15, 23.5)</literal></entry>
6818+
<entry><literal>2013-07-15 08:15:23.5+01</literal></entry>
6819+
</row>
6820+
67446821
<row>
67456822
<entry>
67466823
<indexterm>

‎src/backend/catalog/system_views.sql

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,3 +856,12 @@ RETURNS SETOF RECORD
856856
LANGUAGE INTERNAL
857857
VOLATILE ROWS1000 COST1000
858858
AS'pg_logical_slot_peek_binary_changes';
859+
860+
CREATEOR REPLACE FUNCTION
861+
make_interval(years int4 DEFAULT0, months int4 DEFAULT0, weeks int4 DEFAULT0,
862+
days int4 DEFAULT0, hours int4 DEFAULT0, mins int4 DEFAULT0,
863+
secsdouble precision DEFAULT0.0)
864+
RETURNS interval
865+
LANGUAGE INTERNAL
866+
STRICT IMMUTABLE
867+
AS'make_interval';

‎src/backend/utils/adt/datetime.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ static int DecodeNumberField(int len, char *str,
4040
structpg_tm*tm,fsec_t*fsec,bool*is2digits);
4141
staticintDecodeTime(char*str,intfmask,intrange,
4242
int*tmask,structpg_tm*tm,fsec_t*fsec);
43-
staticintDecodeTimezone(char*str,int*tzp);
4443
staticconstdatetkn*datebsearch(constchar*key,constdatetkn*base,intnel);
4544
staticintDecodeDate(char*str,intfmask,int*tmask,bool*is2digits,
4645
structpg_tm*tm);
@@ -2075,6 +2074,9 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
20752074
elseif (mer==PM&&tm->tm_hour!=HOURS_PER_DAY /2)
20762075
tm->tm_hour+=HOURS_PER_DAY /2;
20772076

2077+
/*
2078+
* This should match the checks in make_timestamp_internal
2079+
*/
20782080
if (tm->tm_hour<0||tm->tm_min<0||tm->tm_min>MINS_PER_HOUR-1||
20792081
tm->tm_sec<0||tm->tm_sec>SECS_PER_MINUTE||
20802082
tm->tm_hour>HOURS_PER_DAY||
@@ -2707,7 +2709,7 @@ DecodeNumberField(int len, char *str, int fmask,
27072709
*
27082710
* NB: this must *not* ereport on failure; see commands/variable.c.
27092711
*/
2710-
staticint
2712+
int
27112713
DecodeTimezone(char*str,int*tzp)
27122714
{
27132715
inttz;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp