📄 datetime.sql
字号:
-- *** testing new built-in time types: datetime, timespan ***-- Shorthand values-- Not directly usable for regression testing since these are not constants.-- So, just try to test parser and hope for the best - tgl 97/04/26SELECT ('today'::datetime = ('yesterday'::datetime + '1 day'::timespan)) as "True";SELECT ('today'::datetime = ('tomorrow'::datetime - '1 day'::timespan)) as "True";SELECT ('tomorrow'::datetime = ('yesterday'::datetime + '2 days'::timespan)) as "True";SELECT ('current'::datetime = 'now'::datetime) as "True";SELECT ('now'::datetime - 'current'::datetime) AS "ZeroSecs";SET DateStyle = 'Postgres,noneuropean';SELECT datetime('1994-01-01', '11:00') AS "Jan_01_1994_11am";CREATE TABLE DATETIME_TBL( d1 datetime);INSERT INTO DATETIME_TBL VALUES ('current');INSERT INTO DATETIME_TBL VALUES ('today');INSERT INTO DATETIME_TBL VALUES ('yesterday');INSERT INTO DATETIME_TBL VALUES ('tomorrow');INSERT INTO DATETIME_TBL VALUES ('tomorrow EST');INSERT INTO DATETIME_TBL VALUES ('tomorrow zulu');SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime;SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'tomorrow'::datetime;SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'yesterday'::datetime;SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime + '1 day'::timespan;SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime - '1 day'::timespan;SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'now'::datetime;DELETE FROM DATETIME_TBL;-- verify uniform transaction time within transaction blockINSERT INTO DATETIME_TBL VALUES ('current');BEGIN;INSERT INTO DATETIME_TBL VALUES ('now');SELECT count(*) AS two FROM DATETIME_TBL WHERE d1 = 'now'::datetime;END;DELETE FROM DATETIME_TBL;-- Special valuesINSERT INTO DATETIME_TBL VALUES ('invalid');INSERT INTO DATETIME_TBL VALUES ('-infinity');INSERT INTO DATETIME_TBL VALUES ('infinity');INSERT INTO DATETIME_TBL VALUES ('epoch');-- Postgres v6.0 standard output formatINSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST');INSERT INTO DATETIME_TBL VALUES ('Invalid Abstime');INSERT INTO DATETIME_TBL VALUES ('Undefined Abstime');-- Variations on Postgres v6.1 standard output formatINSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST');INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST');INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST');INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST');INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST');-- ISO 8601 formatINSERT INTO DATETIME_TBL VALUES ('1997-01-02');INSERT INTO DATETIME_TBL VALUES ('1997-01-02 03:04:05');INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-08');INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-0800');INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 -08:00');INSERT INTO DATETIME_TBL VALUES ('19970210 173201 -0800');INSERT INTO DATETIME_TBL VALUES ('1997-06-10 17:32:01 -07:00');-- Variations for acceptable input formatsINSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997 -0800');INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 10 5:32PM 1997');INSERT INTO DATETIME_TBL VALUES ('1997/02/10 17:32:01-0800');INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 PST');INSERT INTO DATETIME_TBL VALUES ('Feb-10-1997 17:32:01 PST');INSERT INTO DATETIME_TBL VALUES ('02-10-1997 17:32:01 PST');INSERT INTO DATETIME_TBL VALUES ('19970210 173201 PST');INSERT INTO DATETIME_TBL VALUES ('97FEB10 5:32:01PM UTC');INSERT INTO DATETIME_TBL VALUES ('97/02/10 17:32:01 UTC');INSERT INTO DATETIME_TBL VALUES ('97.041 17:32:01 UTC');-- Check date conversion and date arithmeticINSERT INTO DATETIME_TBL VALUES ('1997-06-10 18:32:01 PDT');INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 11 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 12 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 13 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 14 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 15 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097 BC');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0597');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1097');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1697');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1797');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1897');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 2097');INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1996');INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1996');INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1996');INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1996');INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1996');INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1997');INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1999');INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2000');INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 2000');INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2001');-- Currently unsupported syntax and rangesINSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 -0097');INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 5097 BC');SELECT '' AS sixtythree, d1 FROM DATETIME_TBL; -- Demonstrate functions and operatorsSELECT '' AS fortythree, d1 FROM DATETIME_TBL WHERE d1 > '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS fifteen, d1 FROM DATETIME_TBL WHERE d1 < '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS one, d1 FROM DATETIME_TBL WHERE d1 = '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS fiftyeight, d1 FROM DATETIME_TBL WHERE d1 != '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS sixteen, d1 FROM DATETIME_TBL WHERE d1 <= '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS fortyfour, d1 FROM DATETIME_TBL WHERE d1 >= '1997-01-02'::datetime and d1 != 'current'::datetime;SELECT '' AS sixtythree, d1 + '1 year'::timespan AS one_year FROM DATETIME_TBL;SELECT '' AS sixtythree, d1 - '1 year'::timespan AS one_year FROM DATETIME_TBL;-- Casting within a BETWEEN qualifier should probably be allowed by the parser. - tgl 97/04/26--SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff-- FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01'::datetime AND '2038-01-01'::datetime;SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';SELECT '' AS fortynine, 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 FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';SELECT '' AS fortynine, date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec, date_part( 'usec', d1) AS usec FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -