-- -- INT4 -- WARNING: int4 operators never check for over/underflow! -- Some of these answers are consequently numerically incorrect. -- CREATE TABLE INT4_TBL(f1 int4); INSERT INTO INT4_TBL(f1) VALUES ('0'); INSERT INTO INT4_TBL(f1) VALUES ('123456'); INSERT INTO INT4_TBL(f1) VALUES ('-123456'); INSERT INTO INT4_TBL(f1) VALUES ('34.5'); ERROR: pg_atoi: error in "34.5": can't parse ".5" -- largest and smallest values INSERT INTO INT4_TBL(f1) VALUES ('2147483647'); INSERT INTO INT4_TBL(f1) VALUES ('-2147483647'); -- bad input values -- should give warnings INSERT INTO INT4_TBL(f1) VALUES ('1000000000000'); ERROR: pg_atoi: error reading "1000000000000": Range Error INSERT INTO INT4_TBL(f1) VALUES ('asdf'); ERROR: pg_atoi: error in "asdf": can't parse "asdf" SELECT '' AS five, INT4_TBL.*; five | f1 ------+------------- | 0 | 123456 | -123456 | 2147483647 | -2147483647 (5 rows) SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0'; four | f1 ------+------------- | 123456 | -123456 | 2147483647 | -2147483647 (4 rows) SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0'; four | f1 ------+------------- | 123456 | -123456 | 2147483647 | -2147483647 (4 rows) SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0'; one | f1 -----+---- | 0 (1 row) SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0'; one | f1 -----+---- | 0 (1 row) SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0'; two | f1 -----+------------- | -123456 | -2147483647 (2 rows) SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0'; two | f1 -----+------------- | -123456 | -2147483647 (2 rows) SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0'; three | f1 -------+------------- | 0 | -123456 | -2147483647 (3 rows) SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0'; three | f1 -------+------------- | 0 | -123456 | -2147483647 (3 rows) SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0'; two | f1 -----+------------ | 123456 | 2147483647 (2 rows) SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0'; two | f1 -----+------------ | 123456 | 2147483647 (2 rows) SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0'; three | f1 -------+------------ | 0 | 123456 | 2147483647 (3 rows) SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0'; three | f1 -------+------------ | 0 | 123456 | 2147483647 (3 rows) -- positive odds SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1'; one | f1 -----+------------ | 2147483647 (1 row) -- any evens SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0'; three | f1 -------+--------- | 0 | 123456 | -123456 (3 rows) SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+--------- | 0 | 0 | 123456 | 246912 | -123456 | -246912 | 2147483647 | -2 | -2147483647 | 2 (5 rows) SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+--------- | 0 | 0 | 123456 | 246912 | -123456 | -246912 | 2147483647 | -2 | -2147483647 | 2 (5 rows) SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------- | 0 | 2 | 123456 | 123458 | -123456 | -123454 | 2147483647 | -2147483647 | -2147483647 | -2147483645 (5 rows) SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------- | 0 | 2 | 123456 | 123458 | -123456 | -123454 | 2147483647 | -2147483647 | -2147483647 | -2147483645 (5 rows) SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------ | 0 | -2 | 123456 | 123454 | -123456 | -123458 | 2147483647 | 2147483645 | -2147483647 | 2147483647 (5 rows) SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------ | 0 | -2 | 123456 | 123454 | -123456 | -123458 | 2147483647 | 2147483645 | -2147483647 | 2147483647 (5 rows) SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------- | 0 | 0 | 123456 | 61728 | -123456 | -61728 | 2147483647 | 1073741823 | -2147483647 | -1073741823 (5 rows) SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i; five | f1 | x ------+-------------+------------- | 0 | 0 | 123456 | 61728 | -123456 | -61728 | 2147483647 | 1073741823 | -2147483647 | -1073741823 (5 rows) -- -- more complex expressions -- -- variations on unary minus parsing SELECT -2+3 AS one; one ----- 1 (1 row) SELECT 4-2 AS two; two ----- 2 (1 row) SELECT 2- -1 AS three; three ------- 3 (1 row) SELECT 2 - -2 AS four; four ------ 4 (1 row) SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true; true ------ t (1 row) SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true; true ------ t (1 row) SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true; true ------ t (1 row) SELECT int4 '1000' < int4 '999' AS false; false ------- f (1 row) SELECT 4! AS twenty_four; twenty_four ------------- 24 (1 row) SELECT !!3 AS six; six ----- 6 (1 row) SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten; ten ----- 10 (1 row) SELECT 2 + 2 / 2 AS three; three ------- 3 (1 row) SELECT (2 + 2) / 2 AS two; two ----- 2 (1 row)