有以下几种不同类型: 只有FunctionAlias也就是JavaFunction才有schema 1. Aggregate Function 对应org.h2.expression.Aggregate,只能用在select语句中 addAggregate("COUNT", COUNT); addAggregate("SUM", SUM); addAggregate("MIN", MIN); addAggregate("MAX", MAX); addAggregate("AVG", AVG); addAggregate("GROUP_CONCAT", GROUP_CONCAT); addAggregate("STDDEV_SAMP", STDDEV_SAMP); addAggregate("STDDEV", STDDEV_SAMP); addAggregate("STDDEV_POP", STDDEV_POP); addAggregate("STDDEVP", STDDEV_POP); addAggregate("VAR_POP", VAR_POP); addAggregate("VARP", VAR_POP); addAggregate("VAR_SAMP", VAR_SAMP); addAggregate("VAR", VAR_SAMP); addAggregate("VARIANCE", VAR_SAMP); addAggregate("BOOL_OR", BOOL_OR); // HSQLDB compatibility, but conflicts with x > EVERY(...) addAggregate("SOME", BOOL_OR); addAggregate("BOOL_AND", BOOL_AND); // HSQLDB compatibility, but conflicts with x > SOME(...) addAggregate("EVERY", BOOL_AND); addAggregate("SELECTIVITY", SELECTIVITY); addAggregate("HISTOGRAM", HISTOGRAM); 此类函数名在使用时不带有schema名称 2. 用户定义的Aggregate Function 使用CREATE AGGREGATE语句创建, 如CREATE AGGREGATE MEDIAN FOR "com.acme.db.Median" , "com.acme.db.Median" 类必须实现org.h2.api.AggregateFunction接口 此类函数名在使用时不带有schema名称 3. FunctionAlias 使用CREATE ALIAS语句创建, 此类函数是直接对Java中的static方法的直接调用 如: stmt.executeUpdate("CREATE SCHEMA IF NOT EXISTS myschema AUTHORIZATION sa"); stmt.executeUpdate("create table IF NOT EXISTS mytable(id int primary key, name varchar(500))"); stmt.executeUpdate("CREATE ALIAS IF NOT EXISTS myschema.MY_SQRT FOR \"java.lang.Math.sqrt\""); CallableStatement cs = conn.prepareCall("?= CALL myschema.MY_SQRT(2.2)"); cs.registerOutParameter(1, 0); cs.execute(); System.out.println(cs.getDouble(1)); 此类函数名在使用时可以带有schema名称(也可以不带,此时使用当前默认schema) 4. built-in function 对应org.h2.expression.Function H2提供的内置函数,不带schema名称 H2内置了4种类别的函数: ---------------------------- Numeric Functions: 数值函数 String Functions: 字符串函数 Time and Date Functions: 时间与日期函数 System Functions: 系统函数 用FunctionInfo类来描述一个函数的相关信息,此类共7个字段: class FunctionInfo { //7个字段 String name; //函数名 int type; //函数种类(就是函数的数字名称, 比如用0表示ABS函数) int dataType; //函数返回值的类型 int parameterCount; //函数参数个数 boolean nullIfParameterIsNull; //只要传给函数的参数有一个是null,那么函数返回值就是null //对于相同的参数(0个或多个),是否每次都返回相同的值,每次调用可能返回不同值,比如:CURRENT_TIME、RAND之类的函数 boolean deterministic; /** * Whether the function is fast, meaning the result shouldn't be cached. */ boolean fast; //只有CSVREAD这个系统函数是true } 总共150个函数 数值函数40个 字符串函数43个 时间与日期函数26个 系统函数41个 TIMESTAMPADD与DATEADD的函数种类一样,但是返回值不一样,其他当函数种类相同的两个函数其他字段都一样 fast字段为true的只有CSVREAD 函数名 函数种类 返回值的类型 参数个数(-1表示可变参数) nullIfParameterIsNull deterministic fast ------------------------------------------------------------------------------------ ABS 0 NULL 1 true true false ACOS 1 DOUBLE 1 true true false ASIN 2 DOUBLE 1 true true false ATAN 3 DOUBLE 1 true true false ATAN2 4 DOUBLE 2 true true false BITAND 5 BIGINT 2 true true false BITOR 6 BIGINT 2 true true false BITXOR 7 BIGINT 2 true true false CEILING 8 DOUBLE 1 true true false CEIL 8 DOUBLE 1 true true false 与前面相同 COS 9 DOUBLE 1 true true false COSH 36 DOUBLE 1 true true false COT 10 DOUBLE 1 true true false DEGREES 11 DOUBLE 1 true true false EXP 12 DOUBLE 1 true true false FLOOR 13 DOUBLE 1 true true false LOG 14 DOUBLE 1 true true false LN 39 DOUBLE 1 true true false LOG10 15 DOUBLE 1 true true false MOD 16 BIGINT 2 true true false PI 17 DOUBLE 0 true true false POWER 18 DOUBLE 2 true true false RADIANS 19 DOUBLE 1 true true false RAND 20 DOUBLE -1 true false false RANDOM 20 DOUBLE -1 true false false 与前面相同 ROUND 21 DOUBLE -1 true true false ROUNDMAGIC 22 DOUBLE 1 true true false SIGN 23 INTEGER 1 true true false SIN 24 DOUBLE 1 true true false SINH 37 DOUBLE 1 true true false SQRT 25 DOUBLE 1 true true false TAN 26 DOUBLE 1 true true false TANH 38 DOUBLE 1 true true false TRUNCATE 27 DOUBLE 2 true true false TRUNC 27 DOUBLE 2 true true false 与前面相同 HASH 29 VARBINARY 3 true true false ENCRYPT 30 VARBINARY 3 true true false DECRYPT 31 VARBINARY 3 true true false SECURE_RAND 28 VARBINARY 1 true false false COMPRESS 32 VARBINARY -1 true true false EXPAND 33 VARBINARY 1 true true false ZERO 34 INTEGER 0 true true false RANDOM_UUID 35 UUID 0 true false false SYS_GUID 35 UUID 0 true false false 与前面相同 ASCII 50 INTEGER 1 true true false BIT_LENGTH 51 BIGINT 1 true true false CHAR 52 VARCHAR 1 true true false CHR 52 VARCHAR 1 true true false 与前面相同 CHAR_LENGTH 53 INTEGER 1 true true false CHARACTER_LENGTH 53 INTEGER 1 true true false 与前面相同 CONCAT 54 VARCHAR -1 false true false CONCAT_WS 92 VARCHAR -1 false true false DIFFERENCE 55 INTEGER 2 true true false HEXTORAW 56 VARCHAR 1 true true false INSERT 57 VARCHAR 4 false true false LCASE 59 VARCHAR 1 true true false LEFT 60 VARCHAR 2 true true false LENGTH 61 BIGINT 1 true true false LOCATE 62 INTEGER -1 true true false POSITION 77 INTEGER 2 true true false INSTR 58 INTEGER -1 true true false LTRIM 63 VARCHAR -1 true true false OCTET_LENGTH 64 BIGINT 1 true true false RAWTOHEX 65 VARCHAR 1 true true false REPEAT 66 VARCHAR 2 true true false REPLACE 67 VARCHAR -1 true true false RIGHT 68 VARCHAR 2 true true false RTRIM 69 VARCHAR -1 true true false SOUNDEX 70 VARCHAR 1 true true false SPACE 71 VARCHAR 1 true true false SUBSTR 72 VARCHAR -1 true true false SUBSTRING 73 VARCHAR -1 true true false UCASE 74 VARCHAR 1 true true false LOWER 75 VARCHAR 1 true true false UPPER 76 VARCHAR 1 true true false TRIM 78 VARCHAR -1 true true false STRINGENCODE 79 VARCHAR 1 true true false STRINGDECODE 80 VARCHAR 1 true true false STRINGTOUTF8 81 VARBINARY 1 true true false UTF8TOSTRING 82 VARCHAR 1 true true false XMLATTR 83 VARCHAR 2 true true false XMLNODE 84 VARCHAR -1 false true false XMLCOMMENT 85 VARCHAR 1 true true false XMLCDATA 86 VARCHAR 1 true true false XMLSTARTDOC 87 VARCHAR 0 true true false XMLTEXT 88 VARCHAR -1 true true false REGEXP_REPLACE 89 VARCHAR 3 true true false RPAD 90 VARCHAR -1 true true false LPAD 91 VARCHAR -1 true true false CURRENT_DATE 117 DATE 0 true false false CURDATE 100 DATE 0 true false false CURRENT_TIME 118 TIME 0 true false false CURTIME 101 TIME 0 true false false CURRENT_TIMESTAMP 119 TIMESTAMP -1 true false false NOW 112 TIMESTAMP -1 true false false DATEADD 102 TIMESTAMP 3 true true false TIMESTAMPADD 102 BIGINT 3 true true false 与前面不同 DATEDIFF 103 BIGINT 3 true true false TIMESTAMPDIFF 103 BIGINT 3 true true false 与前面相同 DAYNAME 104 VARCHAR 1 true true false DAY 105 INTEGER 1 true true false DAY_OF_MONTH 105 INTEGER 1 true true false 与前面相同 DAYOFMONTH 105 INTEGER 1 true true false 与前面相同 DAY_OF_WEEK 106 INTEGER 1 true true false DAYOFWEEK 106 INTEGER 1 true true false 与前面相同 DAY_OF_YEAR 107 INTEGER 1 true true false DAYOFYEAR 107 INTEGER 1 true true false 与前面相同 HOUR 108 INTEGER 1 true true false MINUTE 109 INTEGER 1 true true false MONTH 110 INTEGER 1 true true false MONTHNAME 111 VARCHAR 1 true true false QUARTER 113 INTEGER 1 true true false SECOND 114 INTEGER 1 true true false WEEK 115 INTEGER 1 true true false YEAR 116 INTEGER 1 true true false EXTRACT 120 INTEGER 2 true true false FORMATDATETIME 121 VARCHAR -1 false true false PARSEDATETIME 122 TIMESTAMP -1 false true false ISO_YEAR 123 INTEGER 1 true true false ISO_WEEK 124 INTEGER 1 true true false ISO_DAY_OF_WEEK 125 INTEGER 1 true true false DATABASE 150 VARCHAR 0 true false false USER 151 VARCHAR 0 true false false CURRENT_USER 152 VARCHAR 0 true false false IDENTITY 153 BIGINT 0 true false false IDENTITY_VAL_LOCAL 153 BIGINT 0 true false false 与前面相同 LAST_INSERT_ID 153 BIGINT 0 true false false 与前面相同 LASTVAL 153 BIGINT 0 true false false 与前面相同 SCOPE_IDENTITY 154 BIGINT 0 true false false AUTOCOMMIT 155 BOOLEAN 0 true false false READONLY 156 BOOLEAN 0 true false false DATABASE_PATH 157 VARCHAR 0 true true false LOCK_TIMEOUT 158 INTEGER 0 true false false IFNULL 200 NULL 2 false true false ISNULL 200 NULL 2 false true false 与前面相同 CASEWHEN 201 NULL 3 false true false CONVERT 202 NULL 1 false true false CAST 203 NULL 1 false true false TRUNCATE_VALUE 227 NULL 3 false true false COALESCE 204 NULL -1 false true false NVL 204 NULL -1 false true false 与前面相同 NVL2 228 NULL 3 false true false NULLIF 205 NULL 2 false true false CASE 206 NULL -1 false true false NEXTVAL 207 BIGINT -1 true false false CURRVAL 208 BIGINT -1 true false false ARRAY_GET 209 VARCHAR 2 true true false ARRAY_CONTAINS 230 BOOLEAN 2 false true false CSVREAD 210 RESULT_SET -1 false false true CSVWRITE 211 INTEGER -1 false false false MEMORY_FREE 212 INTEGER 0 true false false MEMORY_USED 213 INTEGER 0 true false false LOCK_MODE 214 INTEGER 0 true false false SCHEMA 215 VARCHAR 0 true false false SESSION_ID 216 INTEGER 0 true false false ARRAY_LENGTH 217 INTEGER 1 true true false LINK_SCHEMA 218 RESULT_SET 6 true false false LEAST 220 NULL -1 false true false GREATEST 219 NULL -1 false true false CANCEL_SESSION 221 BOOLEAN 1 true false false SET 222 NULL 2 false false false FILE_READ 225 NULL -1 false false false TRANSACTION_ID 226 VARCHAR 0 true false false DECODE 229 NULL -1 false true false TABLE 223 RESULT_SET -1 false true false TABLE_DISTINCT 224 RESULT_SET -1 false true false ROW_NUMBER 300 BIGINT 0 false true false 4.1 Numeric Functions: 数值函数39个(LOG和LN等价,所以算一个) ABS ACOS ASIN ATAN COS COSH COT SIN SINH TAN TANH ATAN2 BITAND BITOR BITXOR MOD CEILING DEGREES EXP FLOOR LOG LOG10 RADIANS SQRT PI POWER RAND RANDOM_UUID ROUND ROUNDMAGIC SECURE_RAND SIGN ENCRYPT DECRYPT HASH TRUNCATE COMPRESS EXPAND ZERO