horology.sql 3.9 KB
Newer Older
1
--
T
Thomas G. Lockhart 已提交
2
-- HOROLOGY
3 4 5
--

--
6
-- timestamp, interval arithmetic
7 8
--

9 10 11 12
SELECT timestamp '1996-03-01' - interval '1 second' AS "Feb 29";
SELECT timestamp '1999-03-01' - interval '1 second' AS "Feb 28";
SELECT timestamp '2000-03-01' - interval '1 second' AS "Feb 29";
SELECT timestamp '1999-12-01' + interval '1 month - 1 second' AS "Dec 31";
T
Thomas G. Lockhart 已提交
13

14
CREATE TABLE TEMP_TIMESTAMP (f1 timestamp);
15 16 17

-- get some candidate input values

18 19
INSERT INTO TEMP_TIMESTAMP (f1)
  SELECT d1 FROM TIMESTAMP_TBL
20 21 22
  WHERE d1 BETWEEN '13-jun-1957' AND '1-jan-1997'
   OR d1 BETWEEN '1-jan-1999' AND '1-jan-2010';

23 24 25
SELECT '' AS "11", f1 AS timestamp
  FROM TEMP_TIMESTAMP
  ORDER BY timestamp;
26

27 28 29
SELECT '' AS "110", d.f1 AS timestamp, t.f1 AS interval, d.f1 + t.f1 AS plus
  FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
  ORDER BY plus, timestamp, interval;
30

31 32
SELECT '' AS "110", d.f1 AS timestamp, t.f1 AS interval, d.f1 - t.f1 AS minus
  FROM TEMP_TIMESTAMP d, INTERVAL_TBL t
33
  WHERE isfinite(d.f1)
34
  ORDER BY minus, timestamp, interval;
35

36 37 38
SELECT '' AS "11", d.f1 AS timestamp, timestamp '1980-01-06 00:00 GMT' AS gpstime_zero,
   d.f1 - timestamp '1980-01-06 00:00 GMT' AS difference
  FROM TEMP_TIMESTAMP d
39 40
  ORDER BY difference;

41 42 43
SELECT '' AS "121", d1.f1 AS timestamp1, d2.f1 AS timestamp2, d1.f1 - d2.f1 AS difference
  FROM TEMP_TIMESTAMP d1, TEMP_TIMESTAMP d2
  ORDER BY timestamp1, timestamp2, difference;
44

45
SELECT '' as fifty, d1 as timestamp,
46 47 48
  date_part('year', d1) AS year, date_part('month', d1) AS month,
  date_part('day',d1) AS day, date_part('hour', d1) AS hour,
  date_part('minute', d1) AS minute, date_part('second', d1) AS second
49
  FROM TIMESTAMP_TBL
50
  WHERE isfinite(d1) and d1 >= '1-jan-1900 GMT'
51
  ORDER BY timestamp;
52 53 54 55 56 57 58 59 60 61

--
-- abstime, reltime arithmetic
--

SELECT '' AS four, f1 AS abstime,
  date_part('year', f1) AS year, date_part('month', f1) AS month,
  date_part('day',f1) AS day, date_part('hour', f1) AS hour,
  date_part('minute', f1) AS minute, date_part('second', f1) AS second
  FROM ABSTIME_TBL
T
Thomas G. Lockhart 已提交
62
  WHERE isfinite(f1) and f1 <> abstime 'current'
63 64 65
  ORDER BY abstime;

--
66
-- Conversions
67 68
--

69 70 71
SELECT '' AS "11", f1 AS timestamp, date( f1) AS date
  FROM TEMP_TIMESTAMP
  WHERE f1 <> timestamp 'current'
72 73
  ORDER BY date;

74 75
SELECT '' AS "11", f1 AS timestamp, abstime( f1) AS abstime
  FROM TEMP_TIMESTAMP
76 77
  ORDER BY abstime;

78
SELECT '' AS four, f1 AS abstime, date( f1) AS date
79
  FROM ABSTIME_TBL
T
Thomas G. Lockhart 已提交
80
  WHERE isfinite(f1) AND f1 <> abstime 'current'
81 82
  ORDER BY date;

83 84
SELECT '' AS five, d1 AS timestamp, abstime(d1) AS abstime
  FROM TIMESTAMP_TBL WHERE NOT isfinite(d1);
85

86
SELECT '' AS three, f1 as abstime, timestamp(f1) AS timestamp
87 88
  FROM ABSTIME_TBL WHERE NOT isfinite(f1);

89 90
SELECT '' AS ten, f1 AS interval, reltime( f1) AS reltime
  FROM INTERVAL_TBL;
91

92
SELECT '' AS six, f1 as reltime, interval( f1) AS interval
93 94
  FROM RELTIME_TBL;

95
DROP TABLE TEMP_TIMESTAMP;
96

97
--
98
-- Formats
99 100 101 102 103 104
--

SET DateStyle TO 'US,Postgres';

SHOW DateStyle;

105
SELECT '' AS sixty_two, d1 AS us_postgres FROM TIMESTAMP_TBL;
106 107

SELECT '' AS eight, f1 AS us_postgres FROM ABSTIME_TBL;
108 109 110

SET DateStyle TO 'US,ISO';

111
SELECT '' AS sixty_two, d1 AS us_iso FROM TIMESTAMP_TBL;
112 113 114 115 116 117 118

SELECT '' AS eight, f1 AS us_iso FROM ABSTIME_TBL;

SET DateStyle TO 'US,SQL';

SHOW DateStyle;

119
SELECT '' AS sixty_two, d1 AS us_sql FROM TIMESTAMP_TBL;
120 121 122 123 124 125 126

SELECT '' AS eight, f1 AS us_sql FROM ABSTIME_TBL;

SET DateStyle TO 'European,Postgres';

SHOW DateStyle;

127
INSERT INTO TIMESTAMP_TBL VALUES('13/06/1957');
128

129
SELECT count(*) as one FROM TIMESTAMP_TBL WHERE d1 = 'Jun 13 1957';
130

131
SELECT '' AS sixty_three, d1 AS european_postgres FROM TIMESTAMP_TBL;
132 133 134 135 136 137 138

SELECT '' AS eight, f1 AS european_postgres FROM ABSTIME_TBL;

SET DateStyle TO 'European,ISO';

SHOW DateStyle;

139
SELECT '' AS sixty_three, d1 AS european_iso FROM TIMESTAMP_TBL;
140 141 142 143 144 145 146

SELECT '' AS eight, f1 AS european_iso FROM ABSTIME_TBL;

SET DateStyle TO 'European,SQL';

SHOW DateStyle;

147
SELECT '' AS sixty_three, d1 AS european_sql FROM TIMESTAMP_TBL;
148 149 150 151 152 153 154

SELECT '' AS eight, f1 AS european_sql FROM ABSTIME_TBL;

RESET DateStyle;

SHOW DateStyle;