H 2メモリデータベースの関数

17801 ワード

各データベースは利用者のクエリーの簡便性と使用効率のために、利用者に専用の関数を提供しています.H 2も同様です.oracleほど強力な関数はありませんが、一般的なニーズの使用は満足できます.以下では、どの関数があるかを簡単に紹介します.
一、関数の分類及び名称
1、    (Aggregate Functions)

  AVG
  BOOL_AND
  BOOL_OR
  COUNT
  GROUP_CONCAT
  MAX
  MIN
  SUM
  SELECTIVITY
  STDDEV_POP
  STDDEV_SAMP
  VAR_POP
  VAR_SAMP

2、    (Numeric Functions)

  ABS
  ACOS
  ASIN
  ATAN
  COS
  COT
  SIN
  TAN
  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

 3、     (String Functions)

  ASCII
  BIT_LENGTH
  LENGTH
  OCTET_LENGTH
  CHAR
  CONCAT
  DIFFERENCE
  HEXTORAW
  RAWTOHEX
  INSTR
  INSERT Function
  LOWER
  UPPER
  LEFT
  RIGHT
  LOCATE
  POSITION
  LPAD
  RPAD
  LTRIM
  RTRIM
  TRIM
  REGEXP_REPLACE
  REPEAT
  REPLACE
  SOUNDEX
  SPACE
  STRINGDECODE
  STRINGENCODE
  STRINGTOUTF8
  SUBSTRING
  UTF8TOSTRING
  XMLATTR
  XMLNODE
  XMLCOMMENT
  XMLCDATA
  XMLSTARTDOC
  XMLTEXT

4、       (Time and Date Functions)

  CURRENT_DATE
  CURRENT_TIME
  CURRENT_TIMESTAMP
  DATEADD
  DATEDIFF
  DAYNAME
  DAY_OF_MONTH
  DAY_OF_WEEK
  DAY_OF_YEAR
  EXTRACT
  FORMATDATETIME
  HOUR
  MINUTE
  MONTH
  MONTHNAME
  PARSEDATETIME
  QUARTER
  SECOND
  WEEK
  YEAR

5、    (System Functions)

  ARRAY_GET
  ARRAY_LENGTH
  AUTOCOMMIT
  CANCEL_SESSION
  CASEWHEN   Function
  CAST
  COALESCE
  CONVERT
  CURRVAL
  CSVREAD
  CSVWRITE
  DATABASE
  DATABASE_PATH
  FILE_READ
  GREATEST
  IDENTITY
  IFNULL
  LEAST
  LOCK_MODE
  LOCK_TIMEOUT
  LINK_SCHEMA
  MEMORY_FREE
  MEMORY_USED
  NEXTVAL
  NULLIF
  READONLY
  ROWNUM
  SCHEMA
  SCOPE_IDENTITY
  SESSION_ID
  SET
  TABLE
  TRANSACTION_ID
  USER


二、関数の使用及び説明
AVG ( [ DISTINCT ] { int | long | decimal | double } )

   。        ,    NULL。       SELECT     ,              (  )    。

    :AVG(X)

BOOL_AND(boolean)

         TRUE,        ,    NULL,       SELECT     。

    :BOOL_AND(ID>10)

BOOL_OR(boolean)

         TRUE,        ,    NULL,       SELECT     。

    :BOOL_OR(NAME LIKE ‘W%‘)

COUNT( { * | { [ DISTINCT ] expression } } )

       ,     。         ,        ,     0。       SELECT     。

    :COUNT(*)

GROUP_CONCAT

GROUP_CONCAT ( [ DISTINCT ] string

[ ORDER BY { expression [ ASC | DESC ] } [,...] ]
[ SEPARATOR expression ] )

          。         ‘,‘(    ),          ,        ,    NULL,       SELECT     。

    :GROUP_CONCAT(NAME ORDER BY ID SEPARATOR ‘, ‘)

MAX(value)

    。         ,    NULL,       SELECT     。               (  )    。

    :MAX(NAME)

MIN(value)

    。        ,    NULL,       SELECT     。               (  )    。

    :MIN(NAME)

SUM( [ DISTINCT ] { int | long | decimal | double } )

     。        ,    NULL,       SELECT     。               (  )    。

    :SUM(X)

SELECTIVITY(value)

        (0-100)。       (100 * distinctCount / rowCount)。    0      0(  ) 。10000             。       SELECT     。

    :SELECT SELECTIVITY(FIRSTNAME), SELECTIVITY(NAME) FROM TEST WHERE ROWNUM()<20000

STDDEV_POP( [ DISTINCT ] double )

     。            。        ,    NULL,       SELECT     。

    :STDDEV_POP(X)

STDDEV_SAMP( [ DISTINCT ] double )

     。            。        ,    NULL,       SELECT     。

    :STDDEV(X)

VAR_POPVAR_POP( [ DISTINCT ] double )

    (      )。             。        ,    NULL,       SELECT     。

    :VAR_POP(X)

VAR_SAMP( [ DISTINCT ] double )

    (      )。        ,    NULL,       SELECT     。

    :VAR_SAMP(X)

ABS ( { int | long | decimal | double } )

  JAVA  Math.abs  。       Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE   Math.abs(Long.MIN_VALUE) == Long.MIN_VALUE。                。

    :ABS(ID)

ACOS(double)

  JAVA Math.acos  。             。

    :ACOS(D)

ASIN(double)

  JAVA Math.asin  。             。

    :ASIN(D)

ATAN(double)

  JAVA Math.atan  。            。

    :ATAN(D)

COS(double)

  JAVA Math.cos  。            。

    :COS(ANGLE)

COT(double)

  JAVA   Math.cot。            。

    :COT(ANGLE)

SIN(double)

  JAVA  Math.sin。            。

    :SIN(ANGLE)

TAN(double)

  JAVA  Math.tan。            。

    :TAN(ANGLE)

ATAN2(double, double)
  JAVA  Math.atan2。            。

    :ATAN2(X, Y)

BITAND(long, long)
     。           ,  JAVA   &。

    :BITAND(A, B)

BITOR(long, long)
     。           ,  JAVA   |。

    :BITOR(A, B)

BITXOR(long, long)
      。           ,  JAVA   ^。

    :BITXOR(A, B)

MOD(long, long)
     ,           ,  JAVA   %。

    :MOD(A, B)

CEILING(double)
  JAVA   Math.ceil。             。

    :LOG(A)

DEGREES(double)
  JAVA  Math.toDegrees。            。

    :DEGREES(A)

EXPEXP(double)
  JAVA   Math.exp。            。

    :EXP(A)

FLOOR(double)
  JAVA   Math.floor。            。

    :FLOOR(A)

LOG(double)
  JAVA   Math.log。            。

    :LOG(A)

LOG10(double)
  JAVA   Math.log10 ( Java 5 )。            。

    :LOG10(A)

RADIANS(double)
  JAVA   Math.toRadians。            。

    :RADIANS(A)

SQRT(double)
  JAVA   Math.sqrt。            。

    :SQRT(A)

PIPI()
  JAVA  Math.PI。            。

    :PI()

POWER(double, double)
  JAVA   Math.pow。            。

    :POWER(A, B)

RAND( [ int ] )
                   。     SESSION            。             。

    :RAND()

RANDOM_UUID
      122        UUID。

    :RANDOM_UUID()

ROUND(double, digitsInt)
        ,            。

    :ROUND(VALUE, 2)

ROUNDMAGIC(double)
         ,    ,     0       。     +/-1000000000000      。               ,            ,‘000x‘  ‘0000‘,‘999x‘   ‘999999‘,          ,            。

    :ROUNDMAGIC(VALUE/3*3)

SECURE_RAND(int)
          ,       。

    :CALL SECURE_RAND(16)

SIGN ( { int | long | decimal | double } )
     0  -1,    0  0,    1。

    :SIGN(VALUE)

ENCRYPT(algorithmString, keyBytes, dataBytes)
        。     XTEA   AES。      16  ,         。

    :CALL ENCRYPT(‘AES‘, ‘00‘, STRINGTOUTF8(‘Test‘))


DECRYPT(algorithmString, keyBytes, dataBytes)
      。     XTEA   AES。      16  ,         。

    :CALL TRIM(CHAR(0) FROM UTF8TOSTRING(DECRYPT(‘AES‘, ‘00‘, ‘3fabb4de8f1ee2e97d7793bab2db1116‘)))

HASH(algorithmString, dataBytes, iterationInt)
          HASH ,                  HASH 。     SHA256   。         。

    :CALL HASH(‘SHA256‘, STRINGTOUTF8(‘Password‘), 1000)

TRUNCATE(double, digitsInt)
    (          0)。              。

    :TRUNCATE(VALUE, 2)

COMPRESS(dataBytes [, algorithmString])
             。        : LZF (         ,       ), DEFLATE (      )。          ,                  。         。

    :COMPRESS(STRINGTOUTF8(‘Test‘))

EXPAND(bytes)
   COMPRESS        。         。

    :UTF8TOSTRING(EXPAND(COMPRESS(STRINGTOUTF8(‘Test‘))))

ZERO()
   0,       ,              。

    :ZERO()

ASCII(string)
           ASCII 。          。

    :ASCII(‘Hi‘)

BIT_LENGTH(string)
       。           。 BLOB, CLOB, BYTES   JAVA_OBJECT,          。      16 BIT 。

    :BIT_LENGTH(NAME)

LENGTH{ LENGTH | CHAR_LENGTH | CHARACTER_LENGTH } ( string )
         。           。  BLOB, CLOB, BYTES   JAVA_OBJECT,          。

    :LENGTH(NAME)

OCTET_LENGTH(string)
        。           。 BLOB, CLOB, BYTES   JAVA_OBJECT,          。      2   。

    :OCTET_LENGTH(NAME)

CHAR{ CHAR | CHR } ( int )
  ASCII    。           。

    :CHAR(65)

CONCAT(string, string [,...])
     。           。

    :CONCAT(NAME, ‘!‘)

DIFFERENCE(string, string)
            。          。

    :DIFFERENCE(T1.NAME, T2.NAME)

HEXTORAW(string)
  16           ,4 16          。

    :HEXTORAW(DATA)

RAWTOHEX(string)
        16     。       4 16    。           。

    :RAWTOHEX(DATA)

INSTR(string, searchString, [, startInt])
            。           ,             ,            ,               。            ,  0。

    :INSTR(EMAIL,‘@‘)

INSERT FunctionINSERT(originalString, startInt, lengthInt, addString)
                   。lengthInt       startInt           。           。

    :INSERT(NAME, 1, 1, ‘ ‘)

LOWER{ LOWER | LCASE } ( string )
          。

    :LOWER(NAME)

UPPER{ UPPER | UCASE } ( string )
          。

    :UPPER(NAME) 

LEFT(string, int)
         。

    :LEFT(NAME, 3)

RIGHT(string, int)
         。

    :RIGHT(NAME, 3)

LOCATE(searchString, string [, startInt])
            。           ,             ,            ,               。            ,  0。

    :LOCATE(‘.‘, NAME)

POSITION(searchString, string)
            。   LOCATE。

    :POSITION(‘.‘, NAME)

LPAD(string, int[, paddingString])
           。                  ,            。          ,      。

    :LPAD(AMOUNT, 10, ‘*‘)

RPAD(string, int[, paddingString])
           。                 ,       。          ,      。

    :RPAD(TEXT, 10, ‘-‘)

LTRIM(string)
              。

    :LTRIM(NAME)

RTRIM(string)
              。

    :RTRIM(NAME)

TRIM ( [ { LEADING | TRAILING | BOTH } [ string ] FROM ] string )
                 。              。

    :TRIM(BOTH ‘_‘ FROM NAME)

REGEXP_REPLACE(inputString, regexString, replacementString)
              。      ,   JAVA   String.replaceAll()。

    :REGEXP_REPLACE(‘Hello    World‘, ‘ +‘, ‘ ‘)

REPEAT(string, int)
           。

    :REPEAT(NAME || ‘ ‘, 10)

REPLACE(string, searchString [, replacementString])
                     。            ,              。

    :REPLACE(NAME, ‘ ‘)

SOUNDEX(string)
                。   http://www.archives.gov/genealogy/census/soundex.html 。           。

    :SOUNDEX(NAME)

SPACE(int) 
           。

    :SPACE(80)

STRINGDECODE(string)
  JAVA          。        \b, \t, 
, \f, \r, \", \\, \, \u。 。 :CALL STRINGENCODE(STRINGDECODE(‘Lines 1
Line 2‘)) STRINGENCODE(string) JAVA 。 \b, \t,
, \f, \r, \", \\, \, \u。 。 :CALL STRINGENCODE(STRINGDECODE(‘Lines 1
Line 2‘)) STRINGTOUTF8(string) UTF8 。 。 :CALL UTF8TOSTRING(STRINGTOUTF8(‘This is a test‘)) SUBSTRING{ SUBSTRING | SUBSTR } ( string, startInt [, lengthInt ] ) 。 , :SUBSTRING(string FROM start [FOR length]). :SUBSTR(NAME, 1) UTF8TOSTRING(bytes) UTF8 。 :CALL UTF8TOSTRING(STRINGTOUTF8(‘This is a test‘)) XMLATTR(nameString, valueString) XML , name="value"。value XML 。 。 :CALL XMLNODE(‘a‘, XMLATTR(‘href‘, ‘http://h2database.com‘)) XMLNODE(elementString [, attributesString [, contentString]]) XML , 。 :CALL XMLNODE(‘a‘, XMLATTR(‘href‘, ‘http://h2database.com‘), ‘H2‘) XMLCOMMENT(commentString) XML 。 (--) - -。 。 :CALL XMLCOMMENT(‘Test‘) XMLCDATA(valueString) XML CDATA 。 ‘]]>‘, XML 。 。 :CALL XMLCDATA(‘data‘) XMLSTARTDOC() ‘‘ 。 :CALL XMLSTARTDOC() XMLTEXT(valueString) XML , 。 :CALL XMLTEXT(‘test‘) ARRAY_GET(arrayExpression, indexExpression) , 。 :CALL ARRAY_GET((‘Hello‘, ‘World‘), 2) ARRAY_LENGTH(arrayExpression) 。 :CALL ARRAY_LENGTH((‘Hello‘, ‘World‘)) AUTOCOMMIT() SESSION , TRUE。 :AUTOCOMMIT() CANCEL_SESSION(sessionInt) SESSION 。 ( SET MULTI_THREADED)。 TRUE, SESSION , FALSE。 。 :CANCEL_SESSION(3) CASEWHEN FunctionCASEWHEN(boolean, aValue, bValue) boolean aValue, bValue。 。 :CASEWHEN(ID=1, ‘A‘, ‘B‘) CAST(value AS dataType) 。 , JAVA ( 0x # 16 , 0 8 )。 :CAST(NAME AS INT) COALESCE(aValue, bValue [,...]) 。 :COALESCE(A, B, C) CONVERT(value, dataType) 。 :CONVERT(NAME, INT) CURRVAL( [ schemaName, ] sequenceString ) ( ) , SESSION。 , (start - interval)。 SCHEMA , SCHEMA 。 SCHEMA , ( )。 。 :CURRVAL(‘TEST_SEQ‘) CSVREAD(fileNameString [, columnsString [, csvOptions ] ] ) CSV( ) 。 ,NULL 。 ( ), , ( NULL), , , ( 、 ‘_‘、 ; JAVA ), 。 , , ( )。 , 。 NULL, VARCHAR。 : SELECT * FROM CSVREAD(...)。 URL , jar:file:///c:/temp/example.zip!/org/example/nested.zip. 。 : CALL CSVREAD(‘test.csv‘); -- ID, NAME -- UTF-8 , (|) CALL CSVREAD(‘test2.csv‘, ‘ID|NAME‘, ‘UTF-8‘, ‘|‘); -- SELECT * FROM CSVREAD(‘data/test.csv‘, NULL, NULL, ‘;‘); SELECT "Last Name" FROM CSVREAD(‘address.csv‘); CSVWRITE( fileNameString, queryString [, csvOptions [, lineSepString] ] ) CSV( ) 。 。 , NULL 。 , 。 。 。 NULL ( , NULL )。 ( ‘line.separator‘ )。 。 。 : CALL CSVWRITE(‘test.csv‘, ‘SELECT * FROM TEST‘); -- UTF-8 , (|) CALL CSVWRITE(‘test2.csv‘, ‘SELECT * FROM TEST‘, ‘UTF-8‘, ‘|‘); DATABASE() :CALL DATABASE(); DATABASE_PATH() , , NULL。 :CALL DATABASE_PATH(); FILE_READ(fileNameString [,encodingString]) , , BLOB 。 , CLOB 。 ,NULL 。 URL 。 。 : SELECT LENGTH(FILE_READ(‘~/.h2.server.properties‘)) LEN; SELECT FILE_READ(‘http://localhost:8182/stylesheet.css‘, NULL) CSS; GREATEST(aValue, bValue [,...]) , NULL, NULL。 :CALL GREATEST(1, 2, 3); IDENTITY() SESSION 。 , , JAVA , SCOPE_IDENTITY()。 。 :CALL IDENTITY(); IFNULL(aValue, bValue) aValue, bValue。 :CALL IFNULL(NULL, ‘‘); LEAST(aValue, bValue [,...]) , NULL, NULL。 :CALL LEAST(1, 2, 3); LOCK_MODE() 。 SET LOCK_MODE。 。 :CALL LOCK_MODE(); LOCK_TIMEOUT() SESSION ( )。 :LOCK_TIMEOUT() LINK_SCHEMA(targetSchemaString, driverString, urlString, userString, passwordString, sourceSchemaString) SCHEMA 。 , 。 SCHEMA 。 。 。 。 :CALL LINK_SCHEMA(‘TEST2‘, ‘‘, ‘jdbc:h2:test2‘, ‘sa‘, ‘sa‘, ‘PUBLIC‘); MEMORY_FREE() , KB (1024 KB)。 。 , 。 。 :MEMORY_FREE() MEMORY_USED() , KB (1024 KB)。 。 , 。 。 :MEMORY_USED() NEXTVAL( [ schemaName, ] sequenceString ) 。 , 。 SCHEMA , SCHEMA , ( )。 。 :NEXTVAL(‘TEST_SEQ‘) NULLIF(aValue, bValue) aValue bValue NULL, aValue。 :NULLIF(A, B) READONLY() , TRUE。 :READONLY() ROWNUM() , 。 SELECT 、DELETE UPDATE 。 1, 。 , 。 : SELECT ROWNUM(), * FROM TEST; SELECT ROWNUM(), * FROM (SELECT * FROM TEST ORDER BY NAME); SCHEMA() SESSION SCHEMA 。 :CALL SCHEMA() SCOPE_IDENTITY() SESSION , JAVA 。 IDENTITY()。 。 :CALL SCOPE_IDENTITY(); SESSION_ID() SESSION 。 。 。 SESSION 。 :CALL SESSION_ID() SET(@variableName, value) 。 。 , 。 :SELECT X, SET(@I, IFNULL(@I, 0)+X) RUNNING_TOTAL FROM SYSTEM_RANGE(1, 10) TABLE{ TABLE | TABLE_DISTINCT } ( { name dataType = expression } [,...] ) 。 TABLE_DISTINCT 。 :SELECT * FROM TABLE(ID INT=(1, 2), NAME VARCHAR=(‘Hello‘, ‘World‘)) TRANSACTION_ID() SESSION ID。 , , NULL, : logFileId-position-sessionId。 。 ( )。 :CALL TRANSACTION_ID() USER{ USER | CURRENT_USER } () SESSION 。 :CURRENT_USER() CURRENT_DATE{ CURRENT_DATE [ () ] | CURDATE() | SYSDATE | TODAY } 。 :CURRENT_DATE() CURRENT_TIME{ CURRENT_TIME [ () ] | CURTIME() } 。 :CURRENT_TIME() CURRENT_TIMESTAMP{ CURRENT_TIMESTAMP [ ( [ int ] ) ] | NOW( [ int ] ) } , 。 :CURRENT_TIMESTAMP() DATEADD(unitString, addInt, timestamp) , , 。 EXTRACT 。 。 :DATEADD(MONTH, 1, DATE ‘2001-01-31‘) DATEDIFF(unitString, aTimestamp, bTimestamp) 。 。 。 EXTRACT 。 :DATEDIFF(YEAR, T1.CREATED, T2.CREATED) DAYNAME(date) ( )。 :DAYNAME(CREATED) DAY_OF_MONTH(date) (1-31)。 :DAY_OF_MONTH(CREATED) DAY_OF_WEEK(date) (1 ). :DAY_OF_WEEK(CREATED) DAY_OF_YEAR(date) (1-366). :DAY_OF_YEAR(CREATED) EXTRACT( { YEAR | YY | MONTH | MM | DAY | DD | DAY_OF_YEAR | DOY | HOUR | HH | MINUTE | MI | SECOND | SS | MILLISECOND | MS } FROM timestamp ) 。 。 :EXTRACT(SECOND FROM CURRENT_TIMESTAMP) FORMATDATETIME ( timestamp, formatString , localeString , timeZoneString) 、 。 : y , M , d , H , m , s 。 java.text.SimpleDateFormat。 。 :CALL FORMATDATETIME(TIMESTAMP ‘2001-02-03 04:05:06‘, ‘EEE, d MMM yyyy HH:mm:ss z‘, ‘en‘, ‘GMT‘) HOUR(timestamp) (0-23)。 :HOUR(CREATED) MINUTE(timestamp) (0-59)。 :MINUTE(CREATED) MONTH(timestamp) (1-12)。 :MONTH(CREATED) MONTHNAME(date) ( )。 :MONTHNAME(CREATED) PARSEDATETIME(string, formatString, localeString , timeZoneString) 。 : y , M , d , H , m , s 。 , java.text.SimpleDateFormat. :CALL PARSEDATETIME(‘Sat, 3 Feb 2001 03:05:06 GMT‘, ‘EEE, d MMM yyyy HH:mm:ss z‘, ‘en‘, ‘GMT‘) QUARTER(timestamp) (1-4) 。 :QUARTER(CREATED) SECOND(timestamp) (0-59)。 :SECOND(CREATED) WEEK(timestamp) (1-53) 。 。 :WEEK(CREATED) YEAR(timestamp) :YEAR(CREATED)