numeric.sql
来自「PostgreSQL7.4.6 for Linux」· SQL 代码 · 共 704 行 · 第 1/3 页
SQL
704 行
INSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');COMMIT TRANSACTION;BEGIN TRANSACTION;INSERT INTO num_data VALUES (0, '0');INSERT INTO num_data VALUES (1, '0');INSERT INTO num_data VALUES (2, '-34338492.215397047');INSERT INTO num_data VALUES (3, '4.31');INSERT INTO num_data VALUES (4, '7799461.4119');INSERT INTO num_data VALUES (5, '16397.038491');INSERT INTO num_data VALUES (6, '93901.57763026');INSERT INTO num_data VALUES (7, '-83028485');INSERT INTO num_data VALUES (8, '74881');INSERT INTO num_data VALUES (9, '-24926804.045047420');COMMIT TRANSACTION;-- ******************************-- * Create indices for faster checks-- ******************************CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);VACUUM ANALYZE num_exp_add;VACUUM ANALYZE num_exp_sub;VACUUM ANALYZE num_exp_div;VACUUM ANALYZE num_exp_mul;VACUUM ANALYZE num_exp_sqrt;VACUUM ANALYZE num_exp_ln;VACUUM ANALYZE num_exp_log10;VACUUM ANALYZE num_exp_power_10_ln;-- ******************************-- * Now check the behaviour of the NUMERIC type-- ******************************-- ******************************-- * Addition check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, t2.expected FROM num_result t1, num_exp_add t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != t2.expected;DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10) FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected FROM num_result t1, num_exp_add t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != round(t2.expected, 10);-- ******************************-- * Subtraction check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, t2.expected FROM num_result t1, num_exp_sub t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != t2.expected;DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40) FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40) FROM num_result t1, num_exp_sub t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != round(t2.expected, 40);-- ******************************-- * Multiply check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, t2.expected FROM num_result t1, num_exp_mul t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != t2.expected;DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30) FROM num_data t1, num_data t2;SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected FROM num_result t1, num_exp_mul t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != round(t2.expected, 30);-- ******************************-- * Division check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val FROM num_data t1, num_data t2 WHERE t2.val != '0.0';SELECT t1.id1, t1.id2, t1.result, t2.expected FROM num_result t1, num_exp_div t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != t2.expected;DELETE FROM num_result;INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80) FROM num_data t1, num_data t2 WHERE t2.val != '0.0';SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected FROM num_result t1, num_exp_div t2 WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2 AND t1.result != round(t2.expected, 80);-- ******************************-- * Square root check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT id, 0, SQRT(ABS(val)) FROM num_data;SELECT t1.id1, t1.result, t2.expected FROM num_result t1, num_exp_sqrt t2 WHERE t1.id1 = t2.id AND t1.result != t2.expected;-- ******************************-- * Natural logarithm check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT id, 0, LN(ABS(val)) FROM num_data WHERE val != '0.0';SELECT t1.id1, t1.result, t2.expected FROM num_result t1, num_exp_ln t2 WHERE t1.id1 = t2.id AND t1.result != t2.expected;-- ******************************-- * Logarithm base 10 check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val)) FROM num_data WHERE val != '0.0';SELECT t1.id1, t1.result, t2.expected FROM num_result t1, num_exp_log10 t2 WHERE t1.id1 = t2.id AND t1.result != t2.expected;-- ******************************-- * POW(10, LN(value)) check-- ******************************DELETE FROM num_result;INSERT INTO num_result SELECT id, 0, POW(numeric '10', LN(ABS(round(val,200)))) FROM num_data WHERE val != '0.0';SELECT t1.id1, t1.result, t2.expected FROM num_result t1, num_exp_power_10_ln t2 WHERE t1.id1 = t2.id AND t1.result != t2.expected;-- ******************************-- * miscellaneous checks for things that have been broken in the past...-- ******************************-- numeric AVG used to fail on some platformsSELECT AVG(val) FROM num_data;-- Check for appropriate rounding and overflowCREATE TABLE fract_only (id int, val numeric(4,4));INSERT INTO fract_only VALUES (1, '0.0');INSERT INTO fract_only VALUES (2, '0.1');INSERT INTO fract_only VALUES (3, '1.0'); -- should failINSERT INTO fract_only VALUES (4, '-0.9999');INSERT INTO fract_only VALUES (5, '0.99994');INSERT INTO fract_only VALUES (6, '0.99995'); -- should failINSERT INTO fract_only VALUES (7, '0.00001');INSERT INTO fract_only VALUES (8, '0.00017');SELECT * FROM fract_only;DROP TABLE fract_only;-- TO_CHAR()--SELECT '' AS to_char_1, to_char(val, '9G999G999G999G999G999') FROM num_data;SELECT '' AS to_char_2, to_char(val, '9G999G999G999G999G999D999G999G999G999G999') FROM num_data; SELECT '' AS to_char_3, to_char(val, '9999999999999999.999999999999999PR') FROM num_data;SELECT '' AS to_char_4, to_char(val, '9999999999999999.999999999999999S') FROM num_data;SELECT '' AS to_char_5, to_char(val, 'MI9999999999999999.999999999999999') FROM num_data; SELECT '' AS to_char_6, to_char(val, 'FMS9999999999999999.999999999999999') FROM num_data;SELECT '' AS to_char_7, to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;SELECT '' AS to_char_8, to_char(val, 'SG9999999999999999.999999999999999th') FROM num_data; SELECT '' AS to_char_9, to_char(val, '0999999999999999.999999999999999') FROM num_data; SELECT '' AS to_char_10, to_char(val, 'S0999999999999999.999999999999999') FROM num_data; SELECT '' AS to_char_11, to_char(val, 'FM0999999999999999.999999999999999') FROM num_data; SELECT '' AS to_char_12, to_char(val, 'FM9999999999999999.099999999999999') FROM num_data;SELECT '' AS to_char_13, to_char(val, 'FM9999999999990999.990999999999999') FROM num_data;SELECT '' AS to_char_14, to_char(val, 'FM0999999999999999.999909999999999') FROM num_data;SELECT '' AS to_char_15, to_char(val, 'FM9999999990999999.099999999999999') FROM num_data;SELECT '' AS to_char_16, to_char(val, 'L9999999999999999.099999999999999') FROM num_data; SELECT '' AS to_char_17, to_char(val, 'FM9999999999999999.99999999999999') FROM num_data;SELECT '' AS to_char_18, to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;SELECT '' AS to_char_19, to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;SELECT '' AS to_char_20, to_char(val, '99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM num_data;SELECT '' AS to_char_21, to_char(val, '999999SG9999999999') FROM num_data;SELECT '' AS to_char_22, to_char(val, 'FM9999999999999999.999999999999999') FROM num_data;-- TO_NUMBER()--SELECT '' AS to_number_1, to_number('-34,338,492', '99G999G999');SELECT '' AS to_number_2, to_number('-34,338,492.654,878', '99G999G999D999G999');SELECT '' AS to_number_3, to_number('<564646.654564>', '999999.999999PR');SELECT '' AS to_number_4, to_number('0.00001-', '9.999999S');SELECT '' AS to_number_5, to_number('5.01-', 'FM9.999999S');SELECT '' AS to_number_5, to_number('5.01-', 'FM9.999999MI');SELECT '' AS to_number_7, to_number('5 4 4 4 4 8 . 7 8', '9 9 9 9 9 9 . 9 9');SELECT '' AS to_number_8, to_number('.01', 'FM9.99');SELECT '' AS to_number_9, to_number('.0', '99999999.99999999');SELECT '' AS to_number_10, to_number('0', '99.99');SELECT '' AS to_number_11, to_number('.-01', 'S99.99');SELECT '' AS to_number_12, to_number('.01-', '99.99S');SELECT '' AS to_number_13, to_number(' . 0 1 -', ' 9 9 . 9 9 S');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?