华为云用户手册

  • 数组函数 array_append(anyarray, anyelement) 描述:向数组末尾添加元素,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_append(ARRAY[1,2], 3) AS RESULT; result --------- {1,2,3}(1 row) array_prepend(anyelement, anyarray) 描述:向数组开头添加元素,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_prepend(1, ARRAY[2,3]) AS RESULT; result --------- {1,2,3}(1 row) array_cat(anyarray, anyarray) 描述:连接两个数组,支持多维数组。 返回类型:anyarray 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT; result ------------- {1,2,3,4,5}(1 row)openGauss=# SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT; result --------------------- {{1,2},{4,5},{6,7}}(1 row) array_union(anyarray, anyarray) 描述:连接两个数组,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,3,4,5}(1 row) array_union_distinct(anyarray, anyarray) 描述:连接两个数组,并去重,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_union_distinct(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,4,5}(1 row) array_intersect(anyarray, anyarray) 描述:两个数组取交集,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {3}(1 row) array_intersect_distinct(anyarray, anyarray) 描述:两个数组取交集,并去重,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_intersect_distinct(ARRAY[1,2,2], ARRAY[2,2,4,5]) AS RESULT; result ------------- {2}(1 row) array_except(anyarray, anyarray) 描述:两个数组取差,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2}(1 row) array_except_distinct(anyarray, anyarray) 描述:两个数组取差,并去重,只支持一维数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_except_distinct(ARRAY[1,2,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2}(1 row) array_ndims(anyarray) 描述:返回数组的维数。 返回类型:int 示例: 12345 openGauss=# SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result -------- 2(1 row) array_dims(anyarray) 描述:返回数组维数的文本表示。 返回类型:text 示例: 12345 openGauss=# SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result ------------ [1:2][1:3](1 row) array_length(anyarray, int) 描述:返回数组维度的长度。 返回类型:int 示例: 12345 openGauss=# SELECT array_length(array[1,2,3], 1) AS RESULT; result -------- 3(1 row) array_lower(anyarray, int) 描述:返回数组维数的下界。 返回类型:int 示例: 12345 openGauss=# SELECT array_lower('[0:2]={1,2,3}'::int[], 1) AS RESULT; result -------- 0(1 row) array_sort(anyarray) 描述:返回从小到大排列好的数组。 返回类型:anyarray 示例: 12345 openGauss=# SELECT array_sort(ARRAY[5,1,3,6,2,7]) AS RESULT; result -------------{1,2,3,5,6,7}(1 row) array_upper(anyarray, int) 描述:返回数组维数的上界。 返回类型:int 示例: 12345 openGauss=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4(1 row) array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为null的值。 返回类型:text 示例: 12345 openGauss=# SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT; result ----------- 1,2,3,*,5(1 row) array_delete(anyarray) 描述:清空数组中的元素并返回一个同类型的空数组。 返回类型:anyarray 示例: openGauss=# SELECT array_delete(ARRAY[1,8,3,7]) AS RESULT; result -------- {}(1 row) array_deleteidx(anyarray, int) 描述:从数组中删除指定下标的元素并返回剩余元素组成的数组。 返回类型:anyarray 示例: openGauss=# SELECT array_deleteidx(ARRAY[1,2,3,4,5], 1) AS RESULT; result----------- {2,3,4,5}(1 row) array_extendnull(anyarray, int) 描述:往数组尾部添加指定个数空元素。 返回类型:anyarray 示例: openGauss=# SELECT array_extend(ARRAY[1,8,3,7],1) AS RESULT; result --------------{1,8,3,7,null}(1 row) array_trim(anyarray, int) 描述:从数组尾部删除指定个数个元素。 返回类型:anyarray 示例: openGauss=# SELECT array_trim(ARRAY[1,8,3,7],1) AS RESULT; result--------- {1,8,3}(1 row) array_exists(anyarray, int) 描述:检查第二个参数是否是数组的合法下标。 返回类型:boolean 示例: openGauss=# SELECT array_exists(ARRAY[1,8,3,7],1) AS RESULT; result -------- t(1 row) array_next(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的下一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_next(ARRAY[1,8,3,7],1) AS RESULT; result -------- 2(1 row) array_prior(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的上一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_prior(ARRAY[1,8,3,7],2) AS RESULT; result -------- 1(1 row) string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 910 openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz}(1 row)openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz}(1 row) unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 123456 openGauss=# SELECT unnest(ARRAY[1,2]) AS RESULT; result -------- 1 2(2 rows)
  • 范围函数 numrange(numeric, numeric, [text]) 描述:表示一个范围。 返回类型:范围元素类型 示例: 1 2 3 4 5 6 7 8 910 openGauss=# SELECT numrange(1.1,2.2) AS RESULT; result --------[1.1,2.2)(1 row)openGauss=# SELECT numrange(1.1,2.2, '()') AS RESULT; result --------(1.1,2.2)(1 row) lower(anyrange) 描述:范围的下界。 返回类型:范围元素类型 示例: 12345 openGauss=# SELECT lower(numrange(1.1,2.2)) AS RESULT; result -------- 1.1(1 row) upper(anyrange) 描述:范围的上界 返回类型:范围元素类型 示例: 12345 openGauss=# SELECT upper(numrange(1.1,2.2)) AS RESULT; result -------- 2.2(1 row) isempty(anyrange) 描述:范围是否为空 返回类型:Boolean 示例: 12345 openGauss=# SELECT isempty(numrange(1.1,2.2)) AS RESULT; result -------- f(1 row) lower_inc(anyrange) 描述:是否包含下界 返回类型:Boolean 示例: 12345 openGauss=# SELECT lower_inc(numrange(1.1,2.2)) AS RESULT; result -------- t(1 row) upper_inc(anyrange) 描述:是否包含上界 返回类型:Boolean 示例: 12345 openGauss=# SELECT upper_inc(numrange(1.1,2.2)) AS RESULT; result -------- f(1 row) lower_inf(anyrange) 描述:下界是否为无穷 返回类型:Boolean 示例: 12345 openGauss=# SELECT lower_inf('(,)'::daterange) AS RESULT; result -------- t(1 row) upper_inf(anyrange) 描述:上界是否为无穷 返回类型:Boolean 示例: 12345 openGauss=# SELECT upper_inf('(,)'::daterange) AS RESULT; result -------- t(1 row)
  • 文本检索调试函数 ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) 描述:测试一个配置。 返回类型:setof record 示例: 123456789 openGauss=# SELECT ts_debug('english', 'The Brightest supernovaes'); ts_debug ----------------------------------------------------------------------------------- (asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",Brightest,{english_stem},english_stem,{brightest}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",supernovaes,{english_stem},english_stem,{supernova})(5 rows) ts_lexize(dict regdictionary, token text) 描述:测试一个数据字典。 返回类型:text[] 示例: 12345 openGauss=# SELECT ts_lexize('english_stem', 'stars'); ts_lexize ----------- {star}(1 row) ts_parse(parser_name text, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 12345678 openGauss=# SELECT ts_parse('default', 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar)(4 rows) ts_parse(parser_oid oid, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 12345678 openGauss=# SELECT ts_parse(3722, 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar)(4 rows) ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 openGauss=# SELECT ts_token_type('default'); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity")(23 rows) ts_token_type(parser_oid oid, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 openGauss=# SELECT ts_token_type(3722); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity")(23 rows) ts_stat(sqlquery text, [ weights text, ] OUT word text, OUT ndoc integer, OUT nentry integer) 描述:获取tsvector列的统计数据。 返回类型:setof record 示例: 123456 openGauss=# SELECT ts_stat('select ''hello world''::tsvector'); ts_stat ------------- (world,1,1) (hello,1,1)(2 rows)
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 12345 openGauss=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16(1 row) 12345 openGauss=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4(1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 示例: 12345 openGauss=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20(1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 12345 openGauss=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16(1 row) 如果source为interval,表示天数。 12345 openGauss=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40(1 row) decade 年份除以10。 12345 openGauss=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200(1 row) dow 每周的星期几,星期天(0)到星期六(6)。 12345 openGauss=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5(1 row) doy 一年的第几天(1~365/366)。 12345 openGauss=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47(1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 12345 openGauss=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12(1 row) 12345 openGauss=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800(1 row) 将epoch值转换为时间戳的方法。 12345 openGauss=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08(1 row) hour 小时域(0-23)。 12345 openGauss=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20(1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 12345 openGauss=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7(1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 12345 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005(1 row) 12345 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006(1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 12345 openGauss=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000(1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 12345 openGauss=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3(1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 12345 openGauss=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500(1 row) minute 分钟域(0-59)。 12345 openGauss=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38(1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 12345 openGauss=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2(1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 12345 openGauss=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1(1 row) quarter 该天所在的该年的季度(1-4)。 12345 openGauss=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1(1 row) second 秒域,包括小数部分(0-59)。 12345 openGauss=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5(1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 12345 openGauss=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7(1 row) year 年份域。 12345 openGauss=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001(1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式范围结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 该函数仅在GaussDB兼容MySQL类型时(即dbcompatibility = 'MYSQL')有效,其他类型不支持该函数。 year 年份。 12345 openGauss=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff---------------- 2(1 row)
  • 时间/日期函数 age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。 返回值类型:interval 示例: 12345 openGauss=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days(1 row) age(timestamp) 描述:当前时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 12345 openGauss=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days(1 row) clock_timestamp() 描述:实时时钟的当前时间戳。volatile函数,每次扫描都会取最新的时间戳,因此在一次查询中每次调用结果不相同。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08(1 row) current_date 描述:当前日期。 返回值类型:date 示例: 12345 openGauss=# SELECT current_date; date ------------ 2017-09-01(1 row) current_time 描述:当前时间。 返回值类型:time with time zone 示例: 12345 openGauss=# SELECT current_time; timetz -------------------- 16:58:07.086215+08(1 row) current_timestamp 描述:当前日期及时间。语句级别时间,同一个语句内返回结果不变。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08(1 row) date_part(text, timestamp) 描述: 获取日期或者时间值中子域的值,例如年或者小时的值。 等效于extract(field from timestamp)。 timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。 返回值类型:double precision 示例: 12345 openGauss=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20(1 row) date_part(text, interval) 描述:获取月份的值。如果大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 12345 openGauss=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3(1 row) date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 12345 openGauss=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00(1 row) trunc(timestamp) 描述:默认按天截取。 示例: 1234 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc---------------------2001-02-16 00:00:00(1 row) trunc(arg1, arg2) 描述:截取到arg2指定的精度。 arg1类型:interval、timestamp with time zone、timestamp without time zone arg2类型:text 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1234 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc---------------------2001-02-16 20:00:00(1 row) daterange(arg1, arg2) 描述:获取时间边界信息。 arg1类型:date arg2类型:date 返回值类型:daterange 示例: 12345 openGauss=# select daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08)(1 row) daterange(arg1, arg2, text) 描述:获取时间边界信息。 arg1类型:date arg2类型:date text类型:text 返回值类型:daterange 示例: 12345 openGauss=# select daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09)(1 row) extract(field from timestamp) 描述:获取小时的值。 返回值类型:double precision 示例: 12345 openGauss=# SELECT extract(hour from timestamp '2001-02-16 20:38:40'); date_part ----------- 20(1 row) extract(field from interval) 描述:获取月份的值。如果大于12,则取与12的模。 返回值类型:double precision 示例: 12345 openGauss=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3(1 row) isfinite(date) 描述:测试是否为有效日期。 返回值类型:Boolean 示例: 12345 openGauss=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t(1 row) isfinite(timestamp) 描述:测试判断是否为有效时间。 返回值类型:Boolean 示例: 12345 openGauss=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t(1 row) isfinite(interval) 描述:测试是否为有效区间。 返回值类型:Boolean 示例: 12345 openGauss=# SELECT isfinite(interval '4 hours'); isfinite ---------- t(1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 12345 openGauss=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days(1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 12345 openGauss=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00(1 row) justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 12345 openGauss=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00(1 row) localtime 描述:当前时间。 返回值类型:time 示例: 12345 openGauss=# SELECT localtime AS RESULT; result---------------- 16:05:55.664681(1 row) localtimestamp 描述:当前日期及时间。 返回值类型:timestamp 示例: 12345 openGauss=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902(1 row) now() 描述:当前日期及时间。事务级别时间,同一个事务内返回结果相同。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08(1 row) timenow() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# select timenow(); timenow------------------------ 2020-06-23 20:36:56+08(1 row) numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置参数IntervalStyle为oracle,兼容该函数在Oracle中的interval输出格式。 示例: 1 2 3 4 5 6 7 8 910111213 openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00(1 row)openGauss=# SET intervalstyle = oracle;SETopenGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval------------------------------- +000000004 04:00:00.000000000(1 row) pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。注意,当数据库调用该函数时,会获取相应的事务快照,相当于一个长事务,如果入参时间过长可能导致数据库oldestxmin无法推进,影响表的回收和查询性能。 返回值类型:void 示例: 12345 openGauss=# SELECT pg_sleep(10); pg_sleep ----------(1 row) statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08(1 row) sysdate 描述:当前日期及时间。 返回值类型:timestamp 示例: 12345 openGauss=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49(1 row) timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 12345 openGauss=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CST(1 row) transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 12345 openGauss=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08(1 row) add_months(d,n) 描述:用于计算时间点d再加上n个月的时间。 d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。 n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。 返回值类型:timestamp 示例: 12345 openGauss=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00(1 row) last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 12345 openGauss=# select last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00(1 row)
  • JSON/JSONB支持的函数 array\_to\_json\(anyarray \[, pretty\_bool\]\) 描述:返回JSON类型的数组。一个多维数组成为一个JSON数组的数组。如果pretty\_bool为true,将在一维元素之间添加换行符。 返回类型:json 示例: openGauss=# SELECT array_to_json('{{1,5},{99,100}}'::int[]); array_to_json ------------------ [[1,5],[99,100]] (1 row) row\_to\_json\(record \[, pretty\_bool\]\) 描述:返回JSON类型的行。如果pretty\_bool为true,将在第一级元素之间添加换行符。 返回类型:json 示例: openGauss=# SELECT row_to_json(row(1,'foo')); row_to_json --------------------- {"f1":1,"f2":"foo"} (1 row)
  • cidr和inet函数 函数abbrev,host,text主要是为了提供可选的显示格式。 abbrev(inet) 描述:缩写显示格式文本。 返回类型:text 示例: 12345 openGauss=# SELECT abbrev(inet '10.1.0.0/16') AS RESULT; result ------------- 10.1.0.0/16(1 row) abbrev(cidr) 描述:缩写显示格式文本。 返回类型:text 示例: 12345 openGauss=# SELECT abbrev(cidr '10.1.0.0/16') AS RESULT; result --------- 10.1/16(1 row) broadcast(inet) 描述:网络广播地址。 返回类型:inet 示例: 12345 openGauss=# SELECT broadcast('192.168.1.5/24') AS RESULT; result ------------------ 192.168.1.255/24(1 row) family(inet) 描述:抽取地址族,4为IPv4。 返回类型:int 示例: 12345 openGauss=# SELECT family('127.0.01') AS RESULT; result -------- 4(1 row) host(inet) 描述:将主机地址类型抽出为文本。 返回类型:text 示例: 12345 openGauss=# SELECT host('192.168.1.5/24') AS RESULT; result ------------- 192.168.1.5(1 row) hostmask(inet) 描述:为网络构造主机掩码。 返回类型:inet 示例: 12345 openGauss=# SELECT hostmask('192.168.23.20/30') AS RESULT; result --------- 0.0.0.3(1 row) masklen(inet) 描述:抽取子网掩码长度。 返回类型:int 示例: 12345 openGauss=# SELECT masklen('192.168.1.5/24') AS RESULT; result -------- 24(1 row) netmask(inet) 描述:为网络构造子网掩码。 返回类型:inet 示例: 12345 openGauss=# SELECT netmask('192.168.1.5/24') AS RESULT; result --------------- 255.255.255.0(1 row) network(inet) 描述:抽取地址的网络部分。 返回类型:cidr 示例: 12345 openGauss=# SELECT network('192.168.1.5/24') AS RESULT; result ---------------- 192.168.1.0/24(1 row) set_masklen(inet, int) 描述:为inet数值设置子网掩码长度。 返回类型:inet 示例: 12345 openGauss=# SELECT set_masklen('192.168.1.5/24', 16) AS RESULT; result ---------------- 192.168.1.5/16(1 row) set_masklen(cidr, int) 描述:为cidr数值设置子网掩码长度。 返回类型:cidr 示例: 12345 openGauss=# SELECT set_masklen('192.168.1.0/24'::cidr, 16) AS RESULT; result ---------------- 192.168.0.0/16(1 row) text(inet) 描述:把IP地址和掩码长度抽取为文本。 返回类型:text 示例: 12345 openGauss=# SELECT text(inet '192.168.1.5') AS RESULT; result ---------------- 192.168.1.5/32(1 row)
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞, nextval操作不会回滚;也就是说,一旦一个值已经被抓取, 那么就认为它已经被用过了,并且不会再被返回。 即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。 因此,GaussDB序列对象不能用于获得"无间隙"序列。 如果nextval被下推到DN上时,各个DN会自动连接GTM,请求next values值,例如(insert into t1 select xxx,t1某一列需要调用nextval函数),由于GTM上有最大连接数为8192的限制,而这类下推语句会导致消耗过多的GTM连接数,因此对于这类语句的并发数目限制为7000(其它语句需要占用部分连接)/集群DN数目。 返回类型:numeric nextval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 12345 openGauss=# select nextval('seqDemo'); nextval--------- 2(1 row) 示例2: 12345 openGauss=# select seqDemo.nextval; nextval--------- 2(1 row) currval(regclass) 返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。 返回类型:numeric currval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 12345 openGauss=# select currval('seq1'); currval--------- 2(1 row) 示例2: 12345 openGauss=# select seq1.currval seq1; currval--------- 2(1 row) lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。 返回类型:numeric 示例: 12345 openGauss=# select lastval(); lastval--------- 2(1 row) setval(regclass, bigint) 描述:设置序列的当前数值。 返回类型:numeric 示例: 12345 openGauss=# select setval('seqDemo',1); setval-------- 1(1 row) setval(regclass, numeric, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:numeric 示例: 12345 openGauss=# select setval('seqDemo',1,true); setval-------- 1(1 row) Setval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 pg_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值,当前值。 返回类型:int16,int16 父主题: 函数和操作符
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 12345 openGauss=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 12345 openGauss=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1)(1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 12345 openGauss=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4(1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 12345 openGauss=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 12345 openGauss=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t(1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 12345 openGauss=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t(1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 12345 openGauss=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4(1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 12345 openGauss=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3(1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 12345 openGauss=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2(1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 12345 openGauss=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0))(1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 12345 openGauss=# SELECT popen(path '((0,0),(1,1),(2,0))') AS RESULT; result --------------------- [(0,0),(1,1),(2,0)](1 row) radius(circle) 描述:计算圆的半径。 返回类型:double precision 示例: 12345 openGauss=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2(1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 12345 openGauss=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row)
  • 关键字 SQL里有保留字和非保留字之分。根据标准,保留字决不能用做其他标识符。非保留字只是在特定的环境里有特殊的含义,而在其他环境里是可以用做标识符的。 表1 SQL关键字 关键字 GaussDB SQL:1999 SQL-92 ABORT 非保留 - - ABS - 非保留 - ABSOLUTE 非保留 保留 保留 ACCESS 非保留 - - ACCOUNT 非保留 - - ACTION 非保留 保留 保留 ADA - 非保留 非保留 ADD 非保留 保留 保留 ADMIN 非保留 保留 - AFTER 非保留 保留 - AGGREGATE 非保留 保留 - ALGORITHM 非保留 - - ALIAS - 保留 - ALL 保留 保留 保留 ALLOCATE - 保留 保留 ALSO 非保留 - - ALTER 非保留 保留 保留 ALWAYS 非保留 - - ANALYSE 保留 - - ANALYZE 保留 - - AND 保留 保留 保留 ANY 保留 保留 保留 APP 非保留 - - APPEND 非保留 - - ARCHIVE 非保留 - - ARE - 保留 保留 ARRAY 保留 保留 - AS 保留 保留 保留 ASC 保留 保留 保留 ASENSITIVE - 非保留 - ASSERTION 非保留 保留 保留 ASSIGNMENT 非保留 非保留 - ASYMMETRIC 保留 非保留 - AT 非保留 保留 保留 ATOMIC - 非保留 - ATTRIBUTE 非保留 - - AUDIT 非保留 - - AUTHID 保留 - - AUTHORIZATION 保留(可以是函数或类型) 保留 保留 AUTOEXTEND 非保留 - - AUTOMAPPED 非保留 - - AVG - 非保留 保留 BACKWARD 非保留 - - BARRIER 非保留 - - BEFORE 非保留 保留 - BEGIN 非保留 保留 保留 BEGIN_NON_ANOYBLOCK 非保留 - - BETWEEN 非保留(不能是函数或类型) 非保留 保留 BIGINT 非保留(不能是函数或类型) - - BINARY 保留(可以是函数或类型) 保留 - BINARY_DOUBLE 非保留(不能是函数或类型) - - BINARY_INTEGER 非保留(不能是函数或类型) - - BIT 非保留(不能是函数或类型) 保留 保留 BITVAR - 非保留 - BIT_LENGTH - 非保留 保留 BLANKS 非保留 - - BLOB 非保留 保留 - BLOCKCHAIN 非保留 - - BODY 非保留 - - BOOLEAN 非保留(不能是函数或类型) 保留 - BOTH 保留 保留 保留 BUCKETCNT 非保留(不能是函数或类型) - - BUCKETS 保留 - - BREADTH - 保留 - BY 非保留 保留 保留 BYTEAWITHOUTORDER 非保留(不能是函数或类型) - - BYTEAWITHOUTORDERWITHEQUAL 非保留(不能是函数或类型) - - C - 非保留 非保留 CACHE 非保留 - - CALL 非保留 保留 - CALLED 非保留 非保留 - CANCELABLE 非保留 - - CARDINALITY - 非保留 - CASCADE 非保留 保留 保留 CASCADED 非保留 保留 保留 CASE 保留 保留 保留 CAST 保留 保留 保留 CATALOG 非保留 保留 保留 CATALOG_NAME - 非保留 非保留 CHAIN 非保留 非保留 - CHAR 非保留(不能是函数或类型) 保留 保留 CHARACTER 非保留(不能是函数或类型) 保留 保留 CHARACTERISTICS 非保留 - - CHARACTERSET 非保留 - - CHARACTER_LENGTH - 非保留 保留 CHARACTER_SET_CATALOG - 非保留 非保留 CHARACTER_SET_NAME - 非保留 非保留 CHARACTER_SET_SCHEMA - 非保留 非保留 CHAR_LENGTH - 非保留 保留 CHECK 保留 保留 保留 CHECKED - 非保留 - CHECKPOINT 非保留 - - CLASS 非保留 保留 - CLEAN 非保留 - - CLASS_ORIGIN - 非保留 非保留 CLIENT 非保留 - - CLIENT_MASTER_KEY 非保留 - - CLIENT_MASTER_KEYS 非保留 - - CLOB 非保留 保留 - CLOSE 非保留 保留 保留 CLUSTER 非保留 - - COALESCE 非保留(不能是函数或类型) 非保留 保留 COBOL - 非保留 非保留 COLLATE 保留 保留 保留 COLLATION 保留(可以是函数或类型) 保留 保留 COLLATION_CATALOG - 非保留 非保留 COLLATION_NAME - 非保留 非保留 COLLATION_SCHEMA - 非保留 非保留 COLUMN 保留 保留 保留 COLUMN_ENCRYPTION_KEY 非保留 - - COLUMN_ENCRYPTION_KEYS 非保留 - - COLUMN_NAME - 非保留 非保留 COMMAND_FUNCTION - 非保留 非保留 COMMAND_FUNCTION_CODE - 非保留 - COMMENT 非保留 - - COMMENTS 非保留 - - COMMIT 非保留 保留 保留 COMMITTED 非保留 非保留 非保留 COMPACT 非保留 - - COMPATIBLE_ILLEGAL_CHARS 非保留 - - COMPLETE 非保留 - - COMPRESS 非保留 - - COMPLETION - 保留 - CONCURRENTLY 保留(可以是函数或类型) - - CONDITION 非保留 - - CONDITION_NUMBER - 非保留 非保留 CONFIGURATION 非保留 - - CONNECT 保留 保留 保留 CONNECTION 非保留 保留 保留 CONSTANT 非保留 - - CONNECTION_NAME - 非保留 非保留 CONSTRAINT 保留 保留 保留 CONSTRAINTS 非保留 保留 保留 CONSTRAINT_CATALOG - 非保留 非保留 CONSTRAINT_NAME - 非保留 非保留 CONSTRAINT_SCHEMA - 非保留 非保留 CONSTRUCTOR - 保留 - CONTAINS - 非保留 - CONTENT 非保留 - - CONTINUE 非保留 保留 保留 CONTVIEW 非保留 - - CONVERSION 非保留 - - CONVERT - 非保留 保留 COORDINATOR 非保留 - - COORDINATORS 非保留 - - COPY 非保留 - - CORRESPONDING - 保留 保留 COST 非保留 - - COUNT - 非保留 保留 CREATE 保留 保留 保留 CROSS 保留(可以是函数或类型) 保留 保留 CSN 保留(可以是函数或类型) - - CSV 非保留 - - CUBE 非保留 保留 - CURRENT 非保留 保留 保留 CURRENT_CATALOG 保留 - - CURRENT_DATE 保留 保留 保留 CURRENT_PATH - 保留 - CURRENT_ROLE 保留 保留 - CURRENT_SCHEMA 保留(可以是函数或类型) - - CURRENT_TIME 保留 保留 保留 CURRENT_TIMESTAMP 保留 保留 保留 CURRENT_USER 保留 保留 保留 CURSOR 非保留 保留 保留 CURSOR_NAME - 非保留 非保留 CYCLE 非保留 保留 - DATA 非保留 保留 非保留 DATABASE 非保留 - - DATAFILE 非保留 - - DATANODE 非保留 - - DATANODES 非保留 - - DATATYPE_CL 非保留 - - DATE 非保留(不能是函数或类型) 保留 保留 DATE_FORMAT 非保留 - - DATETIME_INTERVAL_CODE - 非保留 非保留 DATETIME_INTERVAL_PRECISION - 非保留 非保留 DAY 非保留 保留 保留 DBCOMPATIBILITY 非保留 - - DEALLOCATE 非保留 保留 保留 DEC 非保留(不能是函数或类型) 保留 保留 DECIMAL 非保留(不能是函数或类型) 保留 保留 DECLARE 非保留 保留 保留 DECODE 非保留(不能是函数或类型) - - DEFAULT 保留 保留 保留 DEFAULTS 非保留 - - DEFERRABLE 保留 保留 保留 DEFERRED 非保留 保留 保留 DEFINED - 非保留 - DEFINER 非保留 非保留 - DELETE 非保留 保留 保留 DELIMITER 非保留 - - DELIMITERS 非保留 - - DELTA 非保留 - - DELTAMERGE 保留(可以是函数或类型) - - DEPTH - 保留 - DEREF - 保留 - DESC 保留 保留 保留 DESCRIBE - 保留 保留 DESCRIPTOR - 保留 保留 DESTROY - 保留 - DESTRUCTOR - 保留 - DETERMINISTIC 非保留 保留 - DIAGNOSTICS - 保留 保留 DICTIONARY 非保留 保留 - DIRECT 非保留 - - DIRECTORY 非保留 - - DISABLE 非保留 - - DISCARD 非保留 - - DISCONNECT 非保留 保留 保留 DISPATCH - 非保留 - DISTINCT 保留 保留 保留 DISTRIBUTE 非保留 - - DISTRIBUTION 非保留 - - DO 保留 - - DOCUMENT 非保留 - - DOMAIN 非保留 保留 保留 DOUBLE 非保留 保留 保留 DROP 非保留 保留 保留 DUPLICATE 非保留 - - DYNAMIC - 保留 - DYNAMIC_FUNCTION - 非保留 非保留 DYNAMIC_FUNCTION_CODE - 非保留 - EACH 非保留 保留 - ELASTIC 非保留 - - ELSE 保留 保留 保留 ENABLE 非保留 - - ENCLOSED 非保留 - - ENCODING 非保留 - - ENCRYPTED 非保留 - - ENCRYPTED_VALUE 非保留 - - ENCRYPTION 非保留 - - ENCRYPTION_TYPE 非保留 - - END 保留 保留 保留 END-EXEC - 保留 保留 ENFORCED 非保留 - - ENUM 非保留 - - EOL 非保留 - - ERRORS 非保留 - - EQUALS - 保留 - ESCAPE 非保留 保留 保留 ESCAPING 非保留 - - EVERY 非保留 保留 - EXCEPT 保留 保留 保留 EXCEPTION - 保留 保留 EXCHANGE 非保留 - - EXCLUDE 非保留 - - EXCLUDED 保留 - - EXCLUDING 非保留 - - EXCLUSIVE 非保留 - - EXEC - 保留 保留 EXECUTE 非保留 保留 保留 EXISTING - 非保留 - EXISTS 非保留(不能是函数或类型) 非保留 保留 EXPIRED_P 非保留 - - EXPLAIN 非保留 - - EXTENSION 非保留 - - EXTERNAL 非保留 保留 保留 EXTRACT 非保留(不能是函数或类型) 非保留 保留 FALSE 保留 保留 保留 FAMILY 非保留 - - FAST 非保留 - - FEATURES 非保留 - - FENCED 保留 - - FETCH 保留 保留 保留 FIELDS 非保留 - - FILEHEADER 非保留 - - FILL_MISSING_FIELDS 非保留 - - FILLER 非保留 - - FILTER 非保留 保留 保留 FINAL - 非保留 - FIRST 非保留 保留 保留 FIXED 非保留 保留 保留 FLOAT 非保留(不能是函数或类型) 保留 保留 FOLLOWING 非保留 - - FOR 保留 保留 保留 FORCE 非保留 - - FOREIGN 保留 保留 保留 FORMATTER 非保留 - - FORTRAN - 非保留 非保留 FORWARD 非保留 - - FOUND - 保留 保留 FREE - 保留 - FREEZE 保留(可以是函数或类型) - - FROM 保留 保留 保留 FULL 保留(可以是函数或类型) 保留 保留 FUNCTION 非保留 保留 - FUNCTIONS 非保留 - - G - 非保留 - GENERAL - 保留 - GENERATED 非保留 非保留 - GET - 保留 保留 GLOBAL 非保留 保留 保留 GO - 保留 保留 GOTO - 保留 保留 GRANT 保留 保留 保留 GRANTED 非保留 非保留 - GREATEST 非保留(不能是函数或类型) - - GROUP 保留 保留 保留 GROUPING 非保留(不能是函数或类型) 保留 - GROUPPARENT 保留 - - HANDLER 非保留 - - HAVING 保留 保留 保留 HDFSDIRECTORY 保留(可以是函数或类型) - - HEADER 非保留 - - HIERARCHY - 非保留 - HOLD 非保留 非保留 - HOST - 保留 - HOUR 非保留 保留 保留 IDENTIFIED 非保留 - - IDENTITY 非保留 保留 保留 IF 非保留 - - IGNORE - 保留 - IGNORE_EXTRA_DATA 非保留 - - ILIKE 保留(可以是函数或类型) - - IMMEDIATE 非保留 保留 保留 IMMUTABLE 非保留 - - IMPLEMENTATION - 非保留 - IMPLICIT 非保留 - - IN 保留 保留 保留 INCLUDE 非保留 - - INCLUDING 非保留 - - INCREMENT 非保留 - - INCREMENTAL 非保留 - - INDEX 非保留 - - INDEXES 非保留 - - INDICATOR - 保留 保留 INFILE 非保留 - - INFIX - 非保留 - INHERIT 非保留 - - INHERITS 非保留 - - INITIAL 非保留 - - INITIALIZE - 保留 - INITIALLY 保留 保留 保留 INITRANS 非保留 - - INLINE 非保留 - - INNER 保留(可以是函数或类型) 保留 保留 INOUT 非保留(不能是函数或类型) 保留 - INPUT 非保留 保留 保留 INSENSITIVE 非保留 非保留 保留 INSERT 非保留 保留 保留 INSTANCE - 非保留 - INSTANTIABLE - 非保留 - INSTEAD 非保留 - - INT 非保留(不能是函数或类型) 保留 保留 INTEGER 非保留(不能是函数或类型) 保留 保留 INTERNAL 非保留 - - INTERSECT 保留 保留 保留 INTERVAL 非保留(不能是函数或类型) 保留 保留 INTO 保留 保留 保留 INVOKER 非保留 非保留 - IP 非保留 - - IS 保留 保留 保留 ISNULL 非保留 - - ISOLATION 非保留 保留 保留 ITERATE - 保留 - JOIN 保留(可以是函数或类型) 保留 保留 K - 非保留 - KEY 非保留 保留 保留 KEY_PATH 非保留 - - KEY_MEMBER - 非保留 - KEY_STORE 非保留 - - KEY_TYPE - 非保留 - KILL 非保留 - - LABEL 非保留 - - LANGUAGE 非保留 保留 保留 LARGE 非保留 保留 - LAST 非保留 保留 保留 LATERAL - 保留 - LC_COLLATE 非保留 - - LC_CTYPE 非保留 - - LEADING 保留 保留 保留 LEAKPROOF 非保留 - - LEAST 非保留(不能是函数或类型) - - LEFT 保留(可以是函数或类型) 保留 保留 LENGTH - 非保留 非保留 LESS 保留 保留 - LEVEL 非保留 保留 保留 LIKE 保留(可以是函数或类型) 保留 保留 LIMIT 保留 保留 - LIST 非保留 - - LISTEN 非保留 - - LOAD 非保留 - - LOCAL 非保留 保留 保留 LOCALTIME 保留 保留 - LOCALTIMESTAMP 保留 保留 - LOCATION 非保留 - - LOCATOR - 保留 - LOCK 非保留 - - LOG 非保留 - - LOGGING 非保留 - - LOGIN_ANY 非保留 - - LOGIN_FAILURE 非保留 - - LOGIN_SUCCESS 非保留 - - LOGOUT 非保留 - - LOOP 非保留 - - LOWER - 非保留 保留 M - 非保留 - MAP - 保留 - MAPPING 非保留 - - MASKING 非保留 - - MASTER 非保留 - - MATCH 非保留 保留 保留 MATCHED 非保留 - - MATERIALIZED 非保留 - - MAX - 非保留 保留 MAXEXTENTS 非保留 - - MAXSIZE 非保留 - - MAXTRANS 非保留 - - MAXVALUE 保留 - - MERGE 非保留 - - MESSAGE_LENGTH - 非保留 非保留 MESSAGE_OCTET_LENGTH - 非保留 非保留 MESSAGE_TEXT - 非保留 非保留 METHOD - 非保留 - MIN - 非保留 保留 MINEXTENTS 非保留 - - MINUS 保留 - - MINUTE 非保留 保留 保留 MINVALUE 非保留 - - MOD - 非保留 - MODE 非保留 - - MODEL 非保留 - - MODIFIES - 保留 - MODIFY 保留 保留 - MODULE - 保留 保留 MONTH 非保留 保留 保留 MORE - 非保留 非保留 MOVE 非保留 - - MOVEMENT 非保留 - - MUMPS - 非保留 非保留 NAME 非保留 非保留 非保留 NAMES 非保留 保留 保留 NATIONAL 非保留(不能是函数或类型) 保留 保留 NATURAL 保留(可以是函数或类型) 保留 保留 NCHAR 非保留(不能是函数或类型) 保留 保留 NCLOB - 保留 - NEW - 保留 - NEXT 非保留 保留 保留 NO 非保留 保留 保留 NOCOMPRESS 非保留 - - NOCYCLE 保留 - - NODE 非保留 - - NOLOGGING 非保留 - - NOMAXVALUE 非保留 - - NOMINVALUE 非保留 - - NONE 非保留(不能是函数或类型) 保留 - NOT 保留 保留 保留 NOTHING 非保留 - - NOTIFY 非保留 - - NOTNULL 保留(可以是函数或类型) - - NOWAIT 非保留 - - NULL 保留 保留 保留 NULLABLE - 非保留 非保留 NULLIF 非保留(不能是函数或类型) 非保留 保留 NULLS 非保留 - - NULLCOLS 非保留 - - NUMBER 非保留(不能是函数或类型) 非保留 非保留 NUMERIC 非保留(不能是函数或类型) 保留 保留 NUMSTR 非保留 - - NVARCHAR2 非保留(不能是函数或类型) - - NVL 非保留(不能是函数或类型) - - OBJECT 非保留 保留 - OCTET_LENGTH - 非保留 保留 OF 非保留 保留 保留 OFF 非保留 保留 - OFFSET 保留 - - OIDS 非保留 - - OLD - 保留 - ON 保留 保留 保留 ONLY 保留 保留 保留 OPEN - 保留 保留 OPERATION - 保留 - OPERATOR 非保留 - - OPTIMIZATION 非保留 - - OPTION 非保留 保留 保留 OPTIONALLY 非保留 - - OPTIONS 非保留 非保留 - OR 保留 保留 保留 ORDER 保留 保留 保留 ORDINALITY - 保留 - OUT 非保留(不能是函数或类型) 保留 - OUTER 保留(可以是函数或类型) 保留 保留 OUTPUT - 保留 保留 OVER 非保留 - - OVERLAPS 保留(可以是函数或类型) 非保留 保留 OVERLAY 非保留(不能是函数或类型) 非保留 - OVERRIDING - 非保留 - OWNED 非保留 - - OWNER 非保留 - - PACKAGE 非保留 - - PACKAGES 非保留 - - PAD - 保留 保留 PARAMETER - 保留 - PARAMETERS - 保留 - PARAMETER_MODE - 非保留 - PARAMETER_NAME - 非保留 - PARAMETER_ORDINAL_POSITION - 非保留 - PARAMETER_SPECIFIC_CATALOG - 非保留 - PARAMETER_SPECIFIC_NAME - 非保留 - PARAMETER_SPECIFIC_SCHEMA - 非保留 - PARSER 非保留 - - PARTIAL 非保留 保留 保留 PARTITION 非保留 - - PARTITIONS 非保留 - - PASCAL - 非保留 非保留 PASSING 非保留 - - PASSWORD 非保留 - - PATH - 保留 - PCTFREE 非保留 - - PER 非保留 - - PERCENT 非保留 - - PERFORMANCE 保留 - - PERM 非保留 - - PLACING 保留 - - PLAN 非保留 - - PLANS 非保留 - - POLICY 非保留 - - PLI - 非保留 非保留 POOL 非保留 - - POSITION 非保留(不能是函数或类型) 非保留 保留 POSTFIX - 保留 - PRECEDING 非保留 - - PRECISION 非保留(不能是函数或类型) 保留 保留 PREDICT 非保留 - - PREFERRED 非保留 - - PREFIX 非保留 保留 - PREORDER - 保留 - PREPARE 非保留 保留 保留 PREPARED 非保留 - - PRESERVE 非保留 保留 保留 PRIMARY 保留 保留 保留 PRIOR 保留 保留 保留 PRIORER 保留 - - PRIVATE 非保留 - - PRIVILEGE 非保留 - - PRIVILEGES 非保留 保留 保留 PROCEDURAL 非保留 - - PROCEDURE 保留 保留 保留 PROFILE 非保留 - - PUBLIC - 保留 保留 PUBLICATION 非保留 - - PUBLISH 非保留 - - PURGE 非保留 - - QUERY 非保留 - - QUOTE 非保留 - - RANDOMIZED 非保留 - - RANGE 非保留 - - RATIO 非保留 - - RAW 非保留 - - READ 非保留 保留 保留 READS - 保留 - REAL 非保留(不能是函数或类型) 保留 保留 REASSIGN 非保留 - - REBUILD 非保留 - - RECHECK 非保留 - - RECURSIVE 非保留 保留 - RECYCLEBIN 保留(可以是函数或类型) - - REDISANYVALUE 非保留 - - REF 非保留 保留 - REFERENCES 保留 保留 保留 REFERENCING - 保留 - REFRESH 非保留 - - REINDEX 非保留 - - REJECT 保留 - - RELATIVE 非保留 保留 保留 RELEASE 非保留 - - RELOPTIONS 非保留 - - REMOTE 非保留 - - REMOVE 非保留 - - RENAME 非保留 - - REPEATABLE 非保留 非保留 非保留 REPLACE 非保留 - - REPLICA 非保留 - - RESET 非保留 - - RESIZE 非保留 - - RESOURCE 非保留 - - RESTART 非保留 - - RESTRICT 非保留 保留 保留 RESULT - 保留 - RETURN 非保留 保留 - RETURNED_LENGTH - 非保留 非保留 RETURNED_OCTET_LENGTH - 非保留 非保留 RETURNED_SQLSTATE - 非保留 非保留 RETURNING 保留 - - RETURNS 非保留 保留 - REUSE 非保留 - - REVOKE 非保留 保留 保留 RIGHT 保留(可以是函数或类型) 保留 保留 ROLE 非保留 保留 - ROLES 非保留 - - ROLLBACK 非保留 保留 保留 ROLLUP 非保留 保留 - ROTATION 非保留 - - ROUTINE - 保留 - ROUTINE_CATALOG - 非保留 - ROUTINE_NAME - 非保留 - ROUTINE_SCHEMA - 非保留 - ROW 非保留(不能是函数或类型) 保留 - ROWNUM 保留 - - ROWS 非保留 保留 保留 ROWTYPE 非保留 - - ROW_COUNT - 非保留 非保留 RULE 非保留 - - SAMPLE 非保留 - - SAVEPOINT 非保留 保留 - SCALE - 非保留 非保留 SCHEMA 非保留 保留 保留 SCHEMA_NAME - 非保留 非保留 SCOPE - 保留 - SCROLL 非保留 保留 保留 SEARCH 非保留 保留 - SECOND 非保留 保留 保留 SECTION - 保留 保留 SECURITY 非保留 非保留 - SELECT 保留 保留 保留 SELF - 非保留 - SENSITIVE - 非保留 - SEQUENCE 非保留 保留 - SEQUENCES 非保留 - - SERIALIZABLE 非保留 非保留 非保留 SERVER 非保留 - - SERVER_NAME - 非保留 非保留 SESSION 非保留 保留 保留 SESSION_USER 保留 保留 保留 SET 非保留 保留 保留 SETOF 非保留(不能是函数或类型) - - SETS 非保留 保留 - SHARE 非保留 - - SHIPPABLE 非保留 - - SHOW 非保留 - - SHUTDOWN 非保留 - - SIBLINGS 非保留 - - SIMILAR 保留(可以是函数或类型) 非保留 - SIMPLE 非保留 非保留 - SIZE 非保留 保留 保留 SKIP 非保留 - - SLICE 非保留 - - SMALLDATETIME 非保留(不能是函数或类型) - - SMALLDATETIME_FORMAT 非保留 - - SMALLINT 非保留(不能是函数或类型) 保留 保留 SNAPSHOT 非保留 - - SOME 保留 保留 保留 SOURCE 非保留 非保留 - SPACE 非保留 非保留 保留 SPECIFIC - 保留 - SPECIFICTYPE - 保留 - SPECIFIC_NAME - 非保留 - SPILL 非保留 - - SPLIT 保留 - - SQL - 保留 保留 SQLCODE - - 保留 SQLERROR - - 保留 SQLEXCEPTION - 保留 - SQLSTATE - 保留 保留 SQLWARNING - 保留 - STABLE 非保留 - - STANDALONE 非保留 - - START 非保留 保留 - STATE - 保留 - STATEMENT 非保留 保留 - STATEMENT_ID 非保留 - - STATIC - 保留 - STATISTICS 非保留 - - STDIN 非保留 - - STDOUT 非保留 - - STORAGE 非保留 - - STORE 非保留 - - STORED 非保留 - - STRATIFY 非保留 - - STREAM 非保留 - - STRICT 非保留 - - STRIP 非保留 - - SUBPARTITION 非保留 - - SUBSCRIPTION 非保留 - - STRUCTURE - 保留 - STYLE - 非保留 - SUBCLASS_ORIGIN - 非保留 非保留 SUBLIST - 非保留 - SUBSTRING 非保留(不能是函数或类型) 非保留 保留 SUM - 非保留 保留 SYMMETRIC 保留 非保留 - SYNONYM 非保留 - - SYS_REFCURSOR 非保留 - - SYSDATE 保留 - - SYSID 非保留 - - SYSTEM 非保留 非保留 - SYSTEM_USER - 保留 保留 TABLE 保留 保留 保留 TABLES 非保留 - - TABLESAMPLE 保留(可以是函数或类型) - - TABLESPACE 非保留 - - TABLE_NAME - 非保留 非保留 TARGET 非保留 - - TEMP 非保留 - - TEMPLATE 非保留 - - TEMPORARY 非保留 保留 保留 TERMINATE - 保留 - TERMINATED 非保留 - - TEXT 非保留 - - THAN 非保留 保留 - THEN 保留 保留 保留 TIME 非保留(不能是函数或类型) 保留 保留 TIME_FORMAT 非保留 - - TIMECAPSULE 保留(可以是函数或类型) - - TIMESTAMP 非保留(不能是函数或类型) 保留 保留 TIMESTAMP_FORMAT 非保留 - - TIMESTAMPDIFF 非保留(不能是函数或类型) - - TIMEZONE_HOUR - 保留 保留 TIMEZONE_MINUTE - 保留 保留 TINYINT 非保留(不能是函数或类型) - - TO 保留 保留 保留 TRAILING 保留 保留 保留 TRANSACTION 非保留 保留 保留 TRANSACTIONS_COMMITTED - 非保留 - TRANSACTIONS_ROLLED_BACK - 非保留 - TRANSACTION_ACTIVE - 非保留 - TRANSFORM 非保留 - - TRANSFORMS - 非保留 - TRANSLATE - 非保留 保留 TRANSLATION - 保留 保留 TREAT 非保留(不能是函数或类型) 保留 - TRIGGER 非保留 保留 - TRIGGER_CATALOG - 非保留 - TRIGGER_NAME - 非保留 - TRIGGER_SCHEMA - 非保留 - TRIM 非保留(不能是函数或类型) 非保留 保留 TRUE 保留 保留 保留 TRUNCATE 非保留 - - TRUSTED 非保留 - - TSFIELD 非保留 - - TSTAG 非保留 - - TSTIME 非保留 - - TYPE 非保留 非保留 非保留 TYPES 非保留 - - UESCAPE - - - UNBOUNDED 非保留 - - UNCOMMITTED 非保留 非保留 非保留 UNDER - 保留 - UNENCRYPTED 非保留 - - UNION 保留 保留 保留 UNIQUE 保留 保留 保留 UNKNOWN 非保留 保留 保留 UNLIMITED 非保留 - - UNLISTEN 非保留 - - UNLOCK 非保留 - - UNLOGGED 非保留 - - UNNAMED - 非保留 非保留 UNNEST - 保留 - UNTIL 非保留 - - UNUSABLE 非保留 - - UPDATE 非保留 保留 保留 USEEOF 非保留 - - UPPER - 非保留 保留 USAGE - 保留 保留 USER 保留 保留 保留 USER_DEFINED_TYPE_CATALOG - 非保留 - USER_DEFINED_TYPE_NAME - 非保留 - USER_DEFINED_TYPE_SCHEMA - 非保留 - USING 保留 保留 保留 VACUUM 非保留 - - VALID 非保留 - - VALIDATE 非保留 - - VALIDATION 非保留 - - VALIDATOR 非保留 - - VALUE 非保留 保留 保留 VALUES 非保留(不能是函数或类型) 保留 保留 VARCHAR 非保留(不能是函数或类型) 保留 保留 VARCHAR2 非保留(不能是函数或类型) - - VARIABLE - 保留 - VARIABLES 非保留 - - VARIADIC 保留 - - VARYING 非保留 保留 保留 VCGROUP 非保留 - - VERBOSE 保留(可以是函数或类型) - - VERIFY 保留 - - VERSION 非保留 - - VIEW 非保留 保留 保留 VOLATILE 非保留 - - WAIT 非保留 - - WEAK 非保留 - - WHEN 保留 保留 保留 WHENEVER - 保留 保留 WHERE 保留 保留 保留 WHITESPACE 非保留 - - WINDOW 保留 - - WITH 保留 保留 保留 WITHIN 非保留 - - WITHOUT 非保留 保留 - WORK 非保留 保留 保留 WORKLOAD 非保留 - - WRAPPER 非保留 - - WRITE 非保留 保留 保留 XML 非保留 - - XMLATTRIBUTES 非保留(不能是函数或类型) - - XMLCONCAT 非保留(不能是函数或类型) - - XMLELEMENT 非保留(不能是函数或类型) - - XMLEXISTS 非保留(不能是函数或类型) - - XMLFOREST 非保留(不能是函数或类型) - - XMLPARSE 非保留(不能是函数或类型) - - XMLPI 非保留(不能是函数或类型) - - XMLROOT 非保留(不能是函数或类型) - - XMLSERIALIZE 非保留(不能是函数或类型) - - YEAR 非保留 保留 保留 YES 非保留 - - ZONE 非保留 保留 保留 下表所示字段在建表时禁止作为列名。 CTID XMIN CMIN XMAX CMAX TABLEOID XC_NODE_ID TID OID GS_TUPLE_UID TABLEBUCKETID - - - - 父主题: SQL参考
  • 数字操作函数 abs(x) 描述:绝对值。 返回值类型:和输入相同。 示例: 12345 openGauss=# SELECT abs(-17.4); abs------ 17.4(1 row) acos(x) 描述:反余弦。 返回值类型:double precision 示例: 12345 openGauss=# SELECT acos(-1); acos ------------------ 3.14159265358979(1 row) asin(x) 描述:反正弦。 返回值类型:double precision 示例: 12345 openGauss=# SELECT asin(0.5); asin ------------------ .523598775598299(1 row) atan(x) 描述:反正切。 返回值类型:double precision 示例: 12345 openGauss=# SELECT atan(1); atan ------------------ .785398163397448(1 row) atan2(y, x) 描述:y/x的反正切。 返回值类型:double precision 示例: 12345 openGauss=# SELECT atan2(2, 1); atan2------------------ 1.10714871779409(1 row) bitand(integer, integer) 描述:计算两个数字与运算(&)的结果。 返回值类型:bigint类型数字。 示例: 12345 openGauss=# SELECT bitand(127, 63); bitand -------- 63(1 row) cbrt(dp) 描述:立方根。 返回值类型:double precision 示例: 12345 openGauss=# SELECT cbrt(27.0); cbrt------ 3(1 row) ceil(x) 描述:不小于参数的最小的整数。 返回值类型:整数。 示例: 12345 openGauss=# SELECT ceil(-42.8); ceil ------ -42(1 row) ceiling(dp or numeric) 描述:不小于参数的最小整数(ceil的别名)。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT ceiling(-95.3); ceiling--------- -95(1 row) cos(x) 描述:余弦。 返回值类型:double precision 示例: 12345 openGauss=# SELECT cos(-3.1415927); cos ------------------- -.999999999999999(1 row) cot(x) 描述:余切。 返回值类型:double precision 示例: 12345 openGauss=# SELECT cot(1); cot------------------ .642092615934331(1 row) degrees(dp) 描述:把弧度转为角度。 返回值类型:double precision 示例: 12345 openGauss=# SELECT degrees(0.5); degrees------------------ 28.6478897565412(1 row) div(y numeric, x numeric) 描述:y除以x的商的整数部分。 返回值类型:numeric 示例: 12345 openGauss=# SELECT div(9,4); div----- 2(1 row) exp(x) 描述:自然指数。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT exp(1.0); exp -------------------- 2.7182818284590452(1 row) floor(x) 描述:不大于参数的最大整数。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT floor(-42.8); floor ------- -43(1 row) int1(in) 描述:将传入的text参数转换为int1类型值并返回。 返回值类型:int1 示例: 1 2 3 4 5 6 7 8 910 openGauss=# select int1('123'); int1------ 123(1 row)openGauss=# select int1('a'); int1------ 0(1 row) int2(in) 描述:将传入参数转换为int2类型值并返回。支持的入参类型包括:bigint,float4,float8,int16,integer,numeric,real,text。 返回值类型:int2 示例: 1 2 3 4 5 6 7 8 910 openGauss=# select int2('1234'); int2------ 1234(1 row)openGauss=# select int2(25.3); int2------ 25(1 row) int4(in) 描述:将传入参数转换为int4类型值并返回。支持的入参类型包括:bit,boolean,char,duoble precision,int16,numeric,real,smallint,text。 返回值类型:int4 示例: 1 2 3 4 5 6 7 8 910 openGauss=# select int4('789'); int4------ 789(1 row)openGauss=# select int4(99.9); int4------ 99(1 row) int8(in) 描述:将传入参数转换为int8类型值并返回。支持的入参类型包括:bit,duoble precision,int16,integer,numeric,oid,real,smallint,text。 返回值类型:int8 示例: 1 2 3 4 5 6 7 8 910 openGauss=# select int8('789'); int8------ 789(1 row)openGauss=# select int8(99.9); int8------ 99(1 row) float4(in) 描述:将传入参数转换为float4类型值并返回。支持的入参类型包括:bigint,duoble precision,int16, integer, numeric,smallint,text。 返回值类型:float4 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# select float4('789'); float4-------- 789(1 row)openGauss=# select float4(99.9); float4-------- 99.9(1 row) float8(in) 描述:将传入参数转换为float8类型值并返回。支持的入参类型包括:bigint,int16, integer, numeric,real,smallint,text。 返回值类型:float8 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# select float8('789'); float8-------- 789(1 row)openGauss=# select float8(99.9); float8-------- 99.9(1 row) int16(in) 描述:将传入参数转换为int16类型值并返回。支持的入参类型包括:bigint,boolean, double precision, integer,numeric,oid,real,smallint,tinyint。 返回值类型:int16 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# select int16('789'); int16-------- 789(1 row)openGauss=# select int16(99.9); int16-------- 99(1 row) numeric(in) 描述:将传入参数转换为numeric类型值并返回。支持的入参类型包括:bigint,boolean, double precision, int16,integer,money,real,smallint。 返回值类型:numeric 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# select "numeric"('789'); numeric--------- 789(1 row)openGauss=# select "numeric"(99.9); numeric--------- 99.9(1 row) oid(in) 描述:将传入参数转换为oid类型值并返回。支持的入参类型包括:bigint,int16。 返回值类型:oid radians(dp) 描述:把角度转为弧度。 返回值类型:double precision 示例: 12345 openGauss=# SELECT radians(45.0); radians------------------ .785398163397448(1 row) random() 描述:0.0到1.0之间的随机数。 返回值类型:double precision 示例: 12345 openGauss=# SELECT random(); random------------------ .824823560658842(1 row) multiply(x double precision or text, y double precision or text) 描述:x和y的乘积。 返回值类型:double precision 示例: 1 2 3 4 5 6 7 8 910 openGauss=# SELECT multiply(9.0, '3.0'); multiply ------------------- 27(1 row)openGauss=# SELECT multiply('9.0', 3.0); multiply ------------------- 27(1 row) ln(x) 描述:自然对数。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT ln(2.0); ln ------------------- .6931471805599453(1 row) log(x) 描述:以10为底的对数。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT log(100.0); log -------------------- 2.0000000000000000(1 row) log(b numeric, x numeric) 描述:以b为底的对数。 返回值类型:numeric 示例: 12345 openGauss=# SELECT log(2.0, 64.0); log -------------------- 6.0000000000000000(1 row) mod(x,y) 描述: x/y的余数(模) 如果x是0,则返回y。 返回值类型:与参数类型相同。 示例: 12345 openGauss=# SELECT mod(9,4); mod ----- 1(1 row) 12345 openGauss=# SELECT mod(9,0); mod ----- 9(1 row) pi() 描述:“π”常量。 返回值类型:double precision 示例: 12345 openGauss=# SELECT pi(); pi------------------ 3.14159265358979(1 row) power(a double precision, b double precision) 描述:a的b次幂。 返回值类型:double precision 示例: 12345 openGauss=# SELECT power(9.0, 3.0); power ---------------------- 729.0000000000000000(1 row) round(x) 描述:离输入参数最近的整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# SELECT round(42.4); round ------- 42(1 row)openGauss=# SELECT round(42.6); round ------- 43(1 row) round(v numeric, s int) 描述:保留小数点后s位,s后一位进行四舍五入。 返回值类型:numeric 示例: 12345 openGauss=# SELECT round(42.4382, 2); round------- 42.44(1 row) setseed(dp) 描述:为随后的random()调用设置种子(-1.0到1.0之间,包含)。 返回值类型:void 示例: 12345 openGauss=# SELECT setseed(0.54823); setseed---------(1 row) sign(x) 描述:输出此参数的符号。 返回值类型:-1表示负数,0表示0,1表示正数。 示例: 12345 openGauss=# SELECT sign(-8.4); sign ------ -1(1 row) sin(x) 描述:正弦。 返回值类型:double precision 示例: 12345 openGauss=# SELECT sin(1.57079); sin ------------------ .999999999979986(1 row) sqrt(x) 描述:平方根。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT sqrt(2.0); sqrt ------------------- 1.414213562373095(1 row) tan(x) 描述:正切。 返回值类型:double precision 示例: 12345 openGauss=# SELECT tan(20); tan ------------------ 2.23716094422474(1 row) trunc(x) 描述:截断(取整数部分)。 返回值类型:与输入相同。 示例: 12345 openGauss=# SELECT trunc(42.8); trunc ------- 42(1 row) trunc(v numeric, s int) 描述:截断为s位小数。 返回值类型:numeric 示例: 12345 openGauss=# SELECT trunc(42.4382, 2); trunc------- 42.43(1 row) width_bucket(op numeric, b1 numeric, b2 numeric, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 12345 openGauss=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket-------------- 3(1 row) width_bucket(op dp, b1 dp, b2 dp, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 12345 openGauss=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket-------------- 3(1 row) int1abs 描述:返回uint8类型数据的绝对值。 参数:tinyint 返回值类型:tinyint int1and 描述:返回两个uint8类型数据按位与的结果。 参数:tinyint, tinyint 返回值类型:tinyint int1cmp 描述:返回两个uint8类型数据比较的结果,若第一个参数大,则返回1;若第二个参数大,则返回-1;若相等,则返回0。 参数:tinyint, tinyint 返回值类型:integer int1div 描述:返回两个uint8类型数据相除的结果,结果为float8类型。 参数:tinyint, tinyint 返回值类型:tinyint int1eq 描述:比较两个uint8类型数据是否相等。 参数:tinyint, tinyint 返回值类型:boolean int1ge 描述:判断两个uint8类型数据是否第一个参数大于等于第二个参数。 参数:tinyint, tinyint 返回值类型:boolean int1gt 描述:无符号1字节整数做大于运算。 参数:tinyint, tinyint 返回值类型:boolean int1larger 描述:返回无符号一字节整数中较大值。 参数:tinyint, tinyint 返回值类型:tinyint int1le 描述:判断无符号一字节整数是否小于等于。 参数:tinyint, tinyint 返回值类型:boolean int1lt 描述:判断无符号一字节整数是否小于。 参数:tinyint, tinyint 返回值类型:boolean int1smaller 描述:返回两个无符号一字节整数中较小的数。 参数:tinyint, tinyint 返回值类型:tinyint int1inc 描述:无符号一字节整数加一。 参数:tinyint 返回值类型:tinyint int1mi 描述:无符号一字节整数做差运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mod 描述:无符号一字节整数做取余运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mul 描述:无符号一字节整数做乘法运算。 参数:tinyint, tinyint 返回值类型:tinyint int1ne 描述:无符号一字节整数不等于运算。 参数:tinyint, tinyint 返回值类型:boolean int1pl 描述:无符号一字节整数加法。 参数:tinyint, tinyint 返回值类型:tinyint int1um 描述:无符号一字节数去相反数并返回有符号二字节整数。 参数:tinyint 返回值类型:smallint int1xor 描述:无符号一字节整数异或操作。 参数:tinyint, tinyint 返回值类型:tinyint cash_div_int1 描述:对money类型进行除法运算。 参数:money, tinyint 返回值类型:money cash_mul_int1 描述:对money类型进行乘法运算。 参数:money, tinyint 返回值类型:money int1not 描述:无符号一字节整数二进制位翻转。 参数:tinyint 返回值类型:tinyint int1or 描述:无符号一字节整数或运算。 参数:tinyint, tinyint 返回值类型:tinyint int1shl 描述:无符号一字节整数左移指定位数。 参数:tinyint, integer 返回值类型:tinyint int1shr 描述:无符号一字节整数右移指定位数。 参数:tinyint, integer 返回值类型:tinyint
  • 模式匹配操作符 数据库提供了三种独立的实现模式匹配的方法:SQL LIKE操作符、SIMILAR TO操作符和POSIX-风格的正则表达式。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。 LIKE 描述:判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。 匹配规则: 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 要匹配文本里的下划线或者百分号,在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,写两个逃逸字符。例如要写一个包含反斜线的模式常量,那你就要在SQL语句里写两个反斜线。 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此,写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线。(你可以通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜线。)我们也可以通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。 操作符~~等效于LIKE,操作符~~*等效于ILIKE。 示例: 12345 openGauss=# SELECT 'abc' LIKE 'abc' AS RESULT; result----------- t(1 row) 12345 openGauss=# SELECT 'abc' LIKE 'a%' AS RESULT; result----------- t(1 row) 12345 openGauss=# SELECT 'abc' LIKE '_b_' AS RESULT; result----------- t(1 row) 12345 openGauss=# SELECT 'abc' LIKE 'c' AS RESULT; result----------- f(1 row) SIMILAR TO 描述:SIMILAR TO操作符根据自己的模式是否匹配给定串而返回真或者假。他和LIKE非常类似,只不过他使用SQL标准定义的正则表达式理解模式。 匹配规则: 和LIKE一样,此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。 元字符 含义 | 表示选择(两个候选之一) * 表示重复前面的项零次或更多次 + 表示重复前面的项一次或更多次 ? 表示重复前面的项零次或一次 {m} 表示重复前面的项刚好m次 {m,} 表示重复前面的项m次或更多次 {m,n} 表示重复前面的项至少m次并且不超过n次 () 把多个项组合成一个逻辑项 [...] 声明一个字符类,就像POSIX正则表达式一样 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。 正则表达式函数: 支持使用函数•substring(stringfrompatternforescape)截取匹配SQL正则表达式的子字符串。 示例: 12345 openGauss=# SELECT 'abc' SIMILAR TO 'abc' AS RESULT; result----------- t(1 row) 12345 openGauss=# SELECT 'abc' SIMILAR TO 'a' AS RESULT; result----------- f(1 row) 12345 openGauss=# SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT; result----------- t(1 row) 12345 openGauss=# SELECT 'abc' SIMILAR TO '(b|c)%' AS RESULT; result----------- f(1 row) POSIX正则表达式 描述:正则表达式是一个字符序列,它是定义一个串集合 (一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 我们就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表 1 正则表达式匹配操作符列出了所有可用于POSIX正则表达式模式匹配的操作符。 表1 正则表达式匹配操作符 操作符 描述 例子 ~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*' 匹配规则: 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。 除了上文提到的元字符外, POSIX正则表达式还支持下列模式匹配元字符。 元字符 含义 ^ 表示串开头的匹配 $ 表示串末尾的匹配 . 匹配任意单个字符 正则表达式函数: POSIX正则表达式支持下面函数。 substring(string from pattern)函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_count(string tex....函数提供了获取匹配POSIX正则表达式模式的子串数量的功能。 regexp_instr(string text...函数提供了获取匹配POSIX正则表达式模式子串位置的功能。 regexp_substr(string tex...函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_replace(string, pattern, replacement [,flags ])函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。 regexp_matches(string text, pattern text [, flags text])函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。 regexp_split_to_table(string text, pattern text [, flags text])函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。 regexp_split_to_array(string text, pattern text [, flags text ])和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回。 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。 示例: 12345 openGauss=# SELECT 'abc' ~ 'Abc' AS RESULT;result -------- f(1 row) 12345 openGauss=# SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t(1 row) 12345 openGauss=# SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t(1 row) 12345 openGauss=# SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f(1 row) 12345 openGauss=# SELECT 'abc' ~ '^a' AS RESULT; result -------- t(1 row) 12345 openGauss=# SELECT 'abc' ~ '(b|d)'AS RESULT; result -------- t(1 row) 12345 openGauss=# SELECT 'abc' ~ '^(b|c)'AS RESULT; result -------- f(1 row) 虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地弄成需要任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。 父主题: 函数和操作符
  • 二进制字符串函数 GaussDB也提供了函数调用所使用的常用语法。 btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 12345 openGauss=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d(1 row) get_bit(string, offset) 描述:从字符串中抽取位。 返回值类型:int 示例: 12345 openGauss=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; result-------- 1(1 row) get_byte(string, offset) 描述:从字符串中抽取字节。 返回值类型:int 示例: 12345 openGauss=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; result-------- 109(1 row) set_bit(string,offset, newvalue) 描述:设置字符串中的位。 返回值类型:bytea 示例: 12345 openGauss=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; result ------------------ \x5468006f6d4173(1 row) set_byte(string,offset, newvalue) 描述:设置字符串中的字节。 返回值类型:bytea 示例: 12345 openGauss=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; result ------------------ \x5468006f406173(1 row) rawcmp 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:integer raweq 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawge 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawgt 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawin 描述:raw数据类型解析函数。 参数:cstring 返回值类型:bytea rawle 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlike 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlt 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawne 描述:比较raw类型是否一样。 参数:raw, raw 返回值类型:boolean rawnlike 描述:比较raw类型与模式是否不匹配。 参数:raw, raw 返回值类型:boolean rawout 描述:RAW类型的输出接口。 参数:bytea 返回值类型:cstring rawsend 描述:转换bytea为二进制类型。 参数:raw 返回值类型:bytea rawtohex 描述:raw格式转换为十六进制。 参数:text 返回值类型:text
  • 字符串操作符 SQL定义了一些字符串函数,在这些函数里使用关键字而不是逗号来分隔参数。 octet_length(string) 描述:二进制字符串中的字节数。 返回值类型:int 示例: 12345 openGauss=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT; result-------- 5(1 row) overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 12345 openGauss=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173(1 row) position(substring in string) 描述:特定子字符串的位置。 返回值类型:int 示例: 12345 openGauss=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT; result-------- 3(1 row) substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 12345 openGauss=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f(1 row) substr(bytea [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 12345 openGauss=# select substr(E'Th\\000omas'::bytea,2, 3) as result; result---------- \x68006f(1 row) trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 12345 openGauss=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d(1 row)
  • 账本数据库使用的数据类型 账本数据库使用HASH16数据类型来存储行级hash摘要或表级hash摘要,使用HASH32数据类型来存储全局hash摘要或者历史表校验hash(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)。 表1 账本数据库HASH类型 名称 描述 存储空间 范围 HASH16 以无符号64位整数存储。 8字节 0 ~ +18446744073709551615 HASH32 以包含16个的无符号整形元素数的组存储。 16字节 16个元素的无符号整形数组能够包含的取值范围。 HASH16数据类型用来在账本数据库中存储行级或表级hash摘要。在获得长度为16个字符串的十六进制字符串的hash序列后,系统将调用hash16in函数将该序列转换为一个无符号64位整数存储进HASH16类型变量中。示例如下: 十六进制字符串:e697da2eaa3a775b 对应的无符号64位整数:16615989244166043483十六进制字符串:ffffffffffffffff 对应的无符号64位整数:18446744073709551615 HASH32数据类型用来在账本数据库中存储全局hash摘要或者历史表校验hash。在获得长度为32个字符串的十六进制字符串的hash序列后,系统将调用hash32in函数将该序列转换到一个包含16个无符号整形元素的数组中。示例如下: 十六进制字符串:685847ed1fe38e18f6b0e2b18c00edee 对应的HASH32数组:[104,88,71,237,31,227,142,24,246,176,226,177,140,0,237,238] 父主题: 数据类型
  • 函数和操作符 操作符可以对一个或多个操作数进行处理,位置上可能处于操作数之前、之后,或两个操作数中间。完成处理之后,返回处理结果。 函数是对一些业务逻辑的封装,以完成特定的功能。函数可以有参数,也可以没有参数。函数是有返回类型的,执行完成后,会返回执行结果。 对于系统函数,用户可以进行修改,但是修改之后系统函数的语义可能会发生改变,从而导致系统控制紊乱。正常情况下不允许用户手工修改系统函数。 逻辑操作符 比较操作符 字符处理函数和操作符 二进制字符串函数和操作符 位串函数和操作符 模式匹配操作符 数字操作函数和操作符 时间和日期处理函数和操作符 类型转换函数 几何函数和操作符 网络地址函数和操作符 文本检索函数和操作符 JSON/JSONB函数和操作符 HLL函数和操作符 SEQUENCE函数 数组函数和操作符 范围函数和操作符 聚集函数 窗口函数 安全函数 账本数据库的函数 密态等值的函数 返回集合的函数 条件表达式函数 系统信息函数 系统管理函数 统计信息函数 触发器函数 HashFunc函数 提示信息函数 故障注入系统函数 重分布函数 分布列推荐函数 其他系统函数 内部函数 AI特性函数 动态数据脱敏函数 hotkey特性函数 Global SysCache特性函数 数据损坏检测修复函数 废弃函数 父主题: SQL参考
  • 常量与宏 GaussDB支持的常量和宏请参见表1。 表1 常量和宏 参数 描述 示例 CURRENT_CATALOG 当前数据库 12345 openGauss=# SELECT CURRENT_CATALOG;current_database------------------postgres(1 row) CURRENT_ROLE 当前用户 12345 openGauss=# SELECT CURRENT_ROLE;current_user--------------omm(1 row) CURRENT_SCHEMA 当前数据库模式 12345 openGauss=# SELECT CURRENT_SCHEMA;current_schema----------------public(1 row) CURRENT_USER 当前用户 12345 openGauss=# SELECT CURRENT_USER;current_user--------------omm(1 row) LOCALTIMESTAMP 当前会话时间(无时区) 12345 openGauss=# SELECT LOCALTIMESTAMP; timestamp----------------------------2015-10-10 15:37:30.968538(1 row) NULL 空值 - SESSION_USER 当前系统用户 12345 openGauss=# SELECT SESSION_USER;session_user--------------omm(1 row) SYSDATE 当前系统日期 12345 openGauss=# SELECT SYSDATE;sysdate---------------------2015-10-10 15:48:53(1 row) USER 当前用户,此用户为CURRENT_USER的别名。 12345 openGauss=# SELECT USER;current_user--------------omm(1 row) 父主题: SQL参考
  • 列存表支持的数据类型 列存表支持的数据类型如表1所示。 表1 列存表支持的数据类型 类别 数据类型 长度 是否支持 Numeric Types smallint 2 支持 integer 4 支持 bigint 8 支持 decimal -1 支持 numeric -1 支持 real 4 支持 double precision 8 支持 smallserial 2 支持 serial 4 支持 bigserial 8 支持 Monetary Types money 8 支持 Character Types character varying(n), varchar(n) -1 支持 character(n), char(n) n 支持 character、char 1 支持 text -1 支持 nvarchar2 -1 支持 name 64 不支持 Date/Time Types timestamp with time zone 8 支持 timestamp without time zone 8 支持 date 4 支持 time without time zone 8 支持 time with time zone 12 支持 interval 16 支持 big object clob -1 支持 blob -1 不支持 other types … … 不支持 父主题: 数据类型
  • 对象标识符类型 GaussDB在内部使用对象标识符(OID)作为各种系统表的主键。系统不会给用户创建的表增加一个OID系统字段,OID类型代表一个对象标识符。 目前OID类型用一个四字节的无符号整数实现。因此不建议在创建的表中使用OID字段做主键。 表1 对象标识符类型 名称 引用 描述 示例 OID - 数字化的对象标识符。 564182 CID - 命令标识符。它是系统字段cmin和cmax的数据类型。命令标识符是32位的量。 - XID - 事务标识符。它是系统字段xmin和xmax的数据类型。事务标识符也是64位的量。 - TID - 行标识符。它是系统表字段ctid的数据类型。行ID是一对数值(块号,块内的行索引),它标识该行在其所在表内的物理位置。 - REGCONFIG pg_ts_config 文本搜索配置。 english REGDICTIONARY pg_ts_dict 文本搜索字典。 simple REGOPER pg_operator 操作符名。 - REGOPERATOR pg_operator 带参数类型的操作符。 *(integer,integer)或-(NONE,integer) REGPROC pg_proc 函数名称。 sum REGPROCEDURE pg_proc 带参数类型的函数。 sum(int4) REGCLASS pg_class 关系名。 pg_type REGTYPE pg_type 数据类型名。 integer OID类型:主要作为数据库系统表中字段使用。 示例: 12345 openGauss=# SELECT oid FROM pg_class WHERE relname = 'pg_type'; oid ------ 1247(1 row) OID别名类型REGCLASS:主要用于对象OID值的简化查找。 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142 openGauss=# SELECT attrelid,attname,atttypid,attstattarget FROM pg_attribute WHERE attrelid = 'pg_type'::REGCLASS; attrelid | attname | atttypid | attstattarget ----------+------------+----------+--------------- 1247 | xc_node_id | 23 | 0 1247 | tableoid | 26 | 0 1247 | cmax | 29 | 0 1247 | xmax | 28 | 0 1247 | cmin | 29 | 0 1247 | xmin | 28 | 0 1247 | oid | 26 | 0 1247 | ctid | 27 | 0 1247 | typname | 19 | -1 1247 | typnamespace | 26 | -1 1247 | typowner | 26 | -1 1247 | typlen | 21 | -1 1247 | typbyval | 16 | -1 1247 | typtype | 18 | -1 1247 | typcategory | 18 | -1 1247 | typispreferred | 16 | -1 1247 | typisdefined | 16 | -1 1247 | typdelim | 18 | -1 1247 | typrelid | 26 | -1 1247 | typelem | 26 | -1 1247 | typarray | 26 | -1 1247 | typinput | 24 | -1 1247 | typoutput | 24 | -1 1247 | typreceive | 24 | -1 1247 | typsend | 24 | -1 1247 | typmodin | 24 | -1 1247 | typmodout | 24 | -1 1247 | typanalyze | 24 | -1 1247 | typalign | 18 | -1 1247 | typstorage | 18 | -1 1247 | typnotnull | 16 | -1 1247 | typbasetype | 26 | -1 1247 | typtypmod | 23 | -1 1247 | typndims | 23 | -1 1247 | typcollation | 26 | -1 1247 | typdefaultbin | 194 | -1 1247 | typdefault | 25 | -1 1247 | typacl | 1034 | -1(38 rows) 父主题: 数据类型
  • 伪类型 GaussDB数据类型中包含一系列特殊用途的类型,这些类型按照类别被称为伪类型。伪类型不能作为字段的数据类型,但是可以用于声明函数的参数或者结果类型。 当一个函数不仅是简单地接受并返回某种SQL数据类型的情况下伪类型是很有用的。表1列出了所有的伪类型。 表1 伪类型 名称 描述 any 表示函数接受任何输入数据类型。 anyelement 表示函数接受任何数据类型。 anyarray 表示函数接受任意数组数据类型。 anynonarray 表示函数接受任意非数组数据类型。 anyenum 表示函数接受任意枚举数据类型。 anyrange 表示函数接受任意范围数据类型。 cstring 表示函数接受或者返回一个空结尾的C字符串。 internal 表示函数接受或者返回一种服务器内部的数据类型。 language_handler 声明一个过程语言调用句柄返回language_handler。 fdw_handler 声明一个外部数据封装器返回fdw_handler。 record 标识函数返回一个未声明的行类型。 trigger 声明一个触发器函数返回trigger。 void 表示函数不返回数值。 opaque 一个已经过时的类型,以前用于所有上面这些用途。 声明用C编写的函数(不管是内置的还是动态装载的)都可以接受或者返回任何这样的伪数据类型。当伪类型作为参数类型使用时,用户需要保证函数的正常运行。 用过程语言编写的函数只能使用实现语言允许的伪类型。目前,过程语言都不允许使用作为参数类型的伪类型,并且只允许使用void和record作为结果类型。一些多态的函数还支持使用anyelement,anyarray,anynonarray anyenum和anyrange类型。 伪类型internal用于声明那种只能在数据库系统内部调用的函数,他们不能直接在SQL查询里调用。如果函数至少有一个internal类型的参数,则不能从SQL里调用他。建议不要创建任何声明返回internal的函数,除非他至少有一个internal类型的参数。 示例: 1 2 3 4 5 6 7 8 91011121314151617181920212223 --创建表openGauss=# create table t1 (a int);--插入两条数据openGauss=# insert into t1 values(1),(2);--创建函数showall()。openGauss=# CREATE OR REPLACE FUNCTION showall() RETURNS SETOF recordAS $$ SELECT count(*) from t1; $$LANGUAGE SQL;--调用函数showall()。openGauss=# SELECT showall(); showall --------- (2)(1 row)--删除函数。openGauss=# DROP FUNCTION showall();--删除表openGauss=# drop table t1; 父主题: 数据类型
  • 范围输入/输出 一个范围值的输入必须遵循下列模式之一: (lower-bound,upper-bound) (lower-bound,upper-bound] [lower-bound,upper-bound) [lower-bound,upper-bound] empty 圆括号或方括号指示上下界是否为排除的或者包含的。注意最后一个模式是empty,它表示一个空范围(一个不包含点的范围)。 lower-bound可以是作为 subtype 的合法输入的一个字符串,或者是空表示没有下界。同样,upper-bound可以是作为 subtype 的合法输入的一个字符串,或者是空表示没有上界。 每个界限值可以使用"(双引号)字符引用。如果界限值包含圆括号、方括号、逗号、双引号或反斜线时,这样做是必须的,因为否则那些字符会被认作范围语法的一部分。要把一个双引号或反斜线放在一个被引用的界限值中,就在它前面放一个反斜线(还有,在一个双引号引用的界限值中的一对双引号表示一个双引号字符,这与 SQL 字符串中的单引号规则类似)。此外,你可以避免引用并且使用反斜线转义来保护所有数据字符,否则它们会被当做返回语法的一部分。还有,要写一个是空字符串的界限值,则可以写成"",因为什么都不写表示一个无限界限。 范围值前后允许有空格,但是圆括号或方括号之间的任何空格会被当做上下界值的一部分(取决于元素类型,它可能是也可能不是有意义的)。 例子: -- 包括 3,不包括 7,并且包括 3 和 7 之间的所有点 SELECT '[3,7)'::int4range; -- 既不包括 3 也不包括 7,但是包括之间的所有点 SELECT '(3,7)'::int4range; -- 只包括单独一个点 4 SELECT '[4,4]'::int4range; -- 不包括点(并且将被标准化为 '空') SELECT '[4,4)'::int4range;
  • 构造范围 每一种范围类型都有一个与其同名的构造器函数。使用构造器函数常常比写一个范围文字常数更方便,因为它避免了对界限值的额外引用。构造器函数接受两个或三个参数。两个参数的形式以标准的形式构造一个范围(下界是包含的,上界是排除的),而三个参数的形式按照第三个参数指定的界限形式构造一个范围。第三个参数必须是下列字符串之一: “()”、 “(]”、 “[)”或者 “[]”。 例如: -- 完整形式是:下界、上界以及指示界限包含性/排除性的文本参数。 SELECT numrange(1.0, 14.0, '(]'); -- 如果第三个参数被忽略,则假定为 '[)'。 SELECT numrange(1.0, 14.0); -- 尽管这里指定了 '(]',显示时该值将被转换成标准形式,因为 int8range 是一种离散范围类型(见下文)。 SELECT int8range(1, 14, '(]'); -- 为一个界限使用 NULL 导致范围在那一边是无界的。 SELECT numrange(NULL, 2.2);
  • 离散范围类型 一种范围的元素类型具有一个良定义的“步长”,例如integer或date。在这些类型中,如果两个元素之间没有合法值,它们可以被说成是相邻。这与连续范围相反,连续范围中总是(或者几乎总是)可以在两个给定值之间标识其他元素值。例如,numeric类型之上的一个范围就是连续的,timestamp上的范围也是(尽管timestamp具有有限的精度,并且在理论上可以被当做离散的,最好认为它是连续的,因为通常并不关心它的步长)。 另一种考虑离散范围类型的方法是对每一个元素值都有一种清晰的“下一个”或“上一个”值。了解了这种思想之后,通过选择原来给定的下一个或上一个元素值来取代它,就可以在一个范围界限的包含和排除表达之间转换。例如,在一个整数范围类型中,[4,8]和(3,9)表示相同的值集合,但是对于 numeric 上的范围就不是这样。 一个离散范围类型应该具有一个正规化函数,它知道元素类型期望的步长。正规化函数负责把范围类型的相等值转换成具有相同的表达,特别是与包含或者排除界限一致。如果没有指定一个正规化函数,那么具有不同格式的范围将总是会被当作不等,即使它们实际上是表达相同的一组值。 内建的范围类型int4range、int8range和daterange都使用一种正规的形式,该形式包括下界并且排除上界,也就是[)。不过,用户定义的范围类型可以使用其他习惯。
  • 包含和排除边界 每一个非空范围都有两个界限,下界和上界。这些值之间的所有点都被包括在范围内。一个包含界限意味着边界点本身也被包括在范围内,而一个排除边界意味着边界点不被包括在范围内。 在一个范围的文本形式中,一个包含下界被表达为“[”而一个排除下界被表达为“(”。同样,一个包含上界被表达为“]”而一个排除上界被表达为“)”(详见范围输入/输出)。 函数lower_inc和upper_inc分别测试一个范围值的上下界。
  • 无限(无界)范围 一个范围的下界可以被忽略,意味着所有小于上界的值都被包括在范围中,例如(,3]。 同样,如果范围的上界被忽略,那么所有比上界大的值都被包括在范围中。如果上下界都被忽略,该元素类型的所有值都被认为在该范围中。 规定缺失的包括界限自动转换为排除,例如,[,] 转换为 (,)。 你可以认为这些缺失值为 +/- 无穷大,但它们是特殊范围类型值,并且被视为超出任何范围元素类型的 +/- 无穷大值。 具有“infinity”概念的元素类型可以用它们作为显式边界值。 例如,在时间戳范围,[today,infinity) 不包括特殊的 timestamp 值 infinity,尽管 [today,infinity] 包括它,就好比 [today,) 和 [today,]。 函数lower_inf和upper_inf分别测试一个范围的无限上下界。
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6 时间段输入。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425 --创建表。openGauss=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime);--插入数据。openGauss=# INSERT INTO reltime_type_tab VALUES ('90', '90');openGauss=# INSERT INTO reltime_type_tab VALUES ('-366', '-366');openGauss=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25');openGauss=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS');openGauss=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00');openGauss=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M');--查看数据。openGauss=# SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 -366 | -1 years -18:00:00 90 | 3 mons 30 DAYS 12:00:00 | 1 mon 12:00:00(6 rows)--删除表。openGauss=# DROP TABLE reltime_type_tab;
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入方式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8号。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八号,在DMY模式下是八月一号。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601;任何模式下都是1999年1月8日。 990108 ISO 8601;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建表。openGauss=# CREATE TABLE date_type_tab(coll date);--插入数据。openGauss=# INSERT INTO date_type_tab VALUES (date '12-10-2010');--查看数据。openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10(1 row)--查看日期格式。openGauss=# SHOW datestyle; DateStyle ----------- ISO, MDY(1 row)--设置日期格式。openGauss=# SET datestyle='YMD';SET--插入数据。openGauss=# INSERT INTO date_type_tab VALUES(date '2010-12-11');--查看数据。openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 2010-12-11(2 rows)--删除表。openGauss=# DROP TABLE date_type_tab;
  • 特殊值 GaussDB支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考表5。 表5 特殊值 输入字符串 适用类型 描述 epoch date,timestamp 1970-01-01 00:00:00+00 (Unix系统零时) infinity timestamp 比任何其他时间戳都晚 -infinity timestamp 比任何其他时间戳都早 now date,time,timestamp 当前事务的开始时间 today date,timestamp 今日午夜 tomorrow date,timestamp 明日午夜 yesterday date,timestamp 昨日午夜 allballs time 00:00:00.00 UTC
共100000条