金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(七))

8.224. LAST_DAY

用法:

last_day(date date1)

功能:

计算日期1所在月份的最后一天。

输入参数:

date1:日期1,date 类型。

输出:

函数返回值类型为 date。

例子:

SELECT last_day('2013-7-15 12:12:11');
    last_day
---------------------
 2013-07-31 12:12:11
  (1 row)

8.225. LAST_VALUE

用法:

last_value(value any)

输入参数:

value:窗户帧的名子,通常为投影列列名。

功能:

LAST_VALUE函数返回在窗口帧中的最后一行上计算的value值。类型与any一致。

例子:

select * from t1;
a
---
1
2

(3 rows)

select nvl2(a, 4, 5) from t1;
nvl2
------
  4
  4
  5
(3 rows)

8.226. LASTVAL

用法:

lastval()

输出:

最近一次使用的nextval获取的任何序列的值。

功能:

LASTVAL返回最近一次使用的nextval获取的任何序列的值。

例子:

select nextval('seq');
nextval
---------
  1
(1 row)

select lastval();
lastval
---------
  1
(1 row)

8.227. LCASE

用法:

lcase(string)

功能:

函数返回将指定字符串转为小写后的字符串

例子:

SELECT LCASE('AAFcdEF') "Change" FROM DUAL;
 +-----------------+
 | Change          |
 +=================+
 | aafcdef         |
 +-----------------+

8.228. LEAD

用法:

lead(value any, offset integer [, default any]) over ([partition by partition_expression] [order by sort_expression [ASC|DESC]])

输入参数:

value:用于计算的表达式。 offset: 当前行的偏移量。 default: 如果没有offset的行。则返回default值。

输出:

value或者是default

功能:

LEAD返回value,它在分区内当前行的之后offset个位置的行上计算结果,如果没有这样的行,返回default值替代(必须与value类型相同)。 offset和default都是根据当前行计算的结果。如果忽略它们,则offset默认值是1,default默认值是NULL。

例子:

SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10;
 lead | ten | four
------+-----+------
    0 |   0 |    0
    4 |   0 |    0
      |   4 |    0
    1 |   1 |    1
    7 |   1 |    1
    9 |   7 |    1
      |   9 |    1
      |   0 |    2
    3 |   1 |    3
      |   3 |    3
(10 rows)

8.229. LEAST

用法:

least(value[,...])

输入参数:

value:用于获取最小值的表达式。通常为常量表达式。

输出:

value[,...]的最小值。

功能:

least函数从一个任意的数字表达式列表中选取最小的值,这些表达式必须都可以转换成一个普通的数据。这个类型也将会是结果的数据类型。 列表中的NULL值将会被忽略。只有所有表达式都是NULL时,结果才会是NULL。

例子:

select least(3,5,9,NULL,1) from dual;
least
-------
  1
(1 row)

select least(NULL,NULL,NULL,NULL,NULL) from dual;
least
-------

(1 row)

8.230. LEFT

用法:

left(str text, n int)

功能:

返回字符串中的前 n 个字符。当 n 为负时,将返回除了最后 |n | 个字符之外的所有字符

例子:

select left('abcde',2);
+-----------+
| left      |
+===========+
| ab        |
+-----------+

8.231. LENGTH

用法:

length(string)

功能:

函数返回的LENGTH长度char。LENGTH使用输入字符集定义的字符计算长度。LENGTHB使用字节而不是字符。LENGTHC使用 Unicode 完整字符。LENGTH2使用 UCS2 代码点。LENGTH4使用 UCS4 代码点。

char可以是任何数据类型CHAR, VARCHAR, NCHAR, NVARCHAR, CLOB, 或NCLOB. 例外是LENGTHC,LENGTH2和LENGTH4, 不允许char是CLOBor NCLOB。返回值是数据类型NUMBER。如果char具有 data type CHAR,则长度包括所有尾随空格。如果char为 null,则此函数返回 null。

对 LENGTHB 的限制

该LENGTHB函数仅支持单字节 LOB。它不能与CLOB多NCLOB字节字符集中的数据一起使用。

例子:

以下示例使用LENGTH使用单字节数据库字符集的函数:

SELECT LENGTH('CANDIDE') "Length in characters" FROM DUAL;

+----------------------+
| Length in characters |
+======================+
| 7                    |
+----------------------+

下一个示例假定一个双字节数据库字符集。 .. code:

SELECT LENGTHB ('CANDIDE') "Length in bytes" FROM DUAL;

+-----------------+
| Length in bytes |
+=================+
| 14              |
+-----------------+

8.232. LENGTHB

用法:

lengthb(string text )

功能:

函数返回指定bytea或bit类型数据的字节数,仅支持单字节 LOB。它不能与CLOB多NCLOB字节字符集中的数据一起使用。

例子:

SELECT LENGTHB('1001'::bit) bit_lengthb, lengthb('100111111110000000000000000000000000001111'::bytea) bytea_lengthb; FROM DUAL;

+--------------------+---------------------+
| bit_lengthb        | bytea_lengthb       |
+====================+=====================+
| 1                  | 42                  |
+--------------------|---------------------|

8.233. LISTAGG

用法:

listagg (measure_expr[,’delimiter’]) WITHIN GROUP (order_by_clause) [OVER query_partition_clause]

输入参数:

measure_expr:用于聚集的表达工。通常为列表达式。 delimiter: 聚集表达式中间的分隔符。

输出:

多行聚集后的带delimiter的值。

功能:

对于指定的度量值,LISTAGG函数在ORDER BY子句中指定的每个组中对数据进行排序,然后连接度量值列的值。 可作为单个集合聚集函数、分组聚集函数、分析函数在不同应用场景中使用。。

例子:

select *, listagg(user_name,',') within group (order by user_name)  over (partition by phone_num) from account;
user_name |  phone_num  | amount |     listagg
-----------+-------------+--------+------------------
Lily      | 13642160022 |   5000 | Lily,Lucy
Lucy      | 13642160022 |   3000 | Lily,Lucy
    | 13642160022 |   5050 | Lily,Lucy
Addy      | 15950558535 |   6800 | Addy,Alice,Aline
Alice     | 15950558535 |  12000 | Addy,Alice,Aline
Aline     | 15950558535 |   8500 | Addy,Alice,Aline
Tom       | 18622685434 |  10000 | Tom,Toney
Toney     | 18622685434 |   9000 | Tom,Toney
(8 rows)

8.234. LN

用法:

ln({dp|numeric})

功能:

LN返回n的自然对数,其中n大于 0。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果参数是BINARY_FLOAT,则函数返回BINARY_DOUBLE。否则,函数返回与参数相同的数值数据类型。

例子:

以下示例返回 95 的自然对数:

SELECT LN(95) "Natural log of 95" FROM DUAL;

+-------------------+
| Natural log of 95 |
+===================+
| 4.55387689        |
+-------------------+

8.235. LNNVL

用法:

lnnvl(condition)

输入参数:

condition:用于判断true和false的布尔表达式。

输出:

返回非condition的值。

功能:

如果condition 是FALSE或者是UNKNOWN,LNNVL 返回TRUE。如果condition 是TRUE,LNNVL 返回 FALSE。

例子:

select pg_catalog.lnnvl(true);
lnnvl
-------
f
(1 row)

select pg_catalog.lnnvl(false);
lnnvl
-------
t
(1 row)

8.236. LOCALTIME

用法:

localtime

输入参数:

输出:

函数返回值类型为 time。

功能:

获取当前时间。

例子:

SELECT localtime;
    localtime
-----------------
 19:23:02.220375
(1 row)

8.237. LOCALTIMESTAMP

用法:

localtimestamp()

输入参数:

输出:

函数返回值类型为 timestamp。

功能:

获取当前时间戳。

例子:

SELECT localtimestamp;
       localtimestamp
----------------------------
 2022-06-28 19:27:31.656652
(1 row)

8.238. LOG

用法:

log({dp|numeric})
log(n2 numeric, n1 numeric)

功能:

LOG返回以n2为底n1的对数。底数n2可以是除0或1以外的任何正数,n1也可以是任何正数。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果任何参数是BINARY_FLOATor BINARY_DOUBLE,则函数返回BINARY_DOUBLE。否则函数返回NUMBER。

例子:

以下示例返回 100 的对数:

SELECT LOG(10,100) "Log base 10 of 100" FROM DUAL;

+--------------------+
| Log base 10 of 100 |
+====================+
| 2                  |
+--------------------+

8.239. LOG10

用法:

log10({numeric|double})

功能:

返回对numeric和double值进行取以10为底的对数值。

例子:

以下示例返回 100 的以10为底的对数:

select log10(100);
log10
-------
2
(1 行记录)

8.240. LOWER

用法:

lower(string)

功能:

LOWER返回char,所有字母小写。char可以是任何数据类型CHAR, VARCHAR, NCHAR, NVARCHAR, CLOB, 或NCLOB. 返回值与 的数据类型相同char。数据库根据为基础字符集定义的二进制映射设置字符的大小写。对于语言敏感的小写,请参阅NLS_LOWER。

例子:

以下示例以小写形式返回字符串:

SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase" FROM DUAL;

+--------------------+
| Lowercase          |
+====================+
| mr. scott mcmillan |
+--------------------+

8.241. LOWER_INC

用法:

lower_inc(anyrange)

功能:

函数测试一个范围值的下界

例子:

SELECT LOWER_INC( NUMRANGE(1.1, 2.2) ) “Result" FROM DUAL;

+-----------------+
| “Result         |
+=================+
| t               |
+-----------------+

8.242. LOWER_INF

用法:

lower_inf(anyrange)

功能:

函数测试一个范围值的下界是否无限

例子:

SELECT LOWER_INF( '(,)'::DATERANGE ) “Result" FROM DUAL;

+-----------------+
| “Result         |
+=================+
| t               |
+-----------------+

8.243. LPAD

用法:

lpad(string text,length int [, fill text])

功能:

LPAD返回expr1,n用expr2. 此函数对于格式化查询的输出很有用。

两者expr1和expr2都可以是数据类型CHAR、VARCHAR、NCHAR、NVARCHAR、CLOB或NCLOB中任何一种。如果expr1是字符数据类型,则返回字符串是VARCHAR类型。如果expr1是国家字符数据类型,则返回的字符串是数据类型NVARCHAR,如果是expr1是数据类型LOB,则返回 LOB。返回的字符串与expr1的字符集相同。参数n必须是NUMBER整数或可以隐式转换为NUMBER整数的值。

如果不指定expr2,则默认为一个空白。如果expr1长于n,则此函数返回expr1适合的部分n。

参数n是显示在终端屏幕上的返回值的总长度。在大多数字符集中,这也是返回值中的字符数。但是,在某些多字节字符集中,字符串的显示长度可能与字符串中的字符数不同。

例子:

下面的示例用星号 (*) 和句点 (.) 字符向左填充字符串:

SELECT LPAD('Page 1',15,'*.') "LPAD example" FROM DUAL;

+-----------------+
| LPAD example    |
+=================+
| *.*.*.*.*Page 1 |
+-----------------+

8.244. LSEG

用法:

lseg(box)
lseg(point, point)

输入参数:

box:用于测量方框对角线线段的方框,类型为box。 point: 用于点到点的线段

输出:

返回lseg类型的线段

功能:

测绘点到点的线段。

例子:

SELECT lseg(box'((0,0),(0,1))') from dual;
  lseg
---------------
[(0,1),(0,0)]
(1 row)

SELECT lseg(point'(-1,0)', point'(1,0)') from dual;
  lseg
----------------
[(-1,0),(1,0)]
(1 row)

8.245. LTRIM

用法:

ltrim(string text [, characters text])

功能:

LTRIMchar从 .中包含的所有字符的左端删除set。如果不指定set,则默认为一个空白。KingBase 数据库char从其第一个字符开始扫描并删除所有出现的字符,set直到到达一个不在的字符set,然后返回结果。

两者char和set都可以是任何数据类型CHAR、VARCHAR、NCHAR、NVARCHAR、CLOB或NCLOB。如果char是字符数据类型,则返回VARCHAR,N如果char是国家字符数据类型,则返回的字符串数据类型VARCHAR,如果是char 数据类型是LOB,则返回 LOB。

例子:

以下示例从字符串 中删除所有最左侧出现的小于号 ( <)、大于号 ( >) 和等号 ( ):=

SELECT LTRIM('<=====>BROWNING<=====>', '<>=') "LTRIM Example" FROM DUAL;

+-----------------+
| LTRIM Example   |
+=================+
| BROWNING<=====> |
+-----------------+

8.246. MAKE_DATE

用法:

make_date(year int, month int, day int)

输入参数:

year:年,int 类型。 month:月,int 类型。 day: 日,int 类型。

输出:

函数返回值类型为 date。

功能:

从年,月,日域创建日期。

例子:

SELECT make_date(2013, 7, 15);
make_date
------------
 2013-07-15
(1 row)

8.247. MAKE_INTERVAL

用法:

make_interval(years int default 0, months int default 0, weeks int default 0,
              days int default 0, hours int default 0, mins int default 0,
              secs double default 0.0)

输入参数:

years:年,int 类型,默认值0。 months:月,int 类型,默认值0。 weeks:周,int 类型,默认值0。 days:日,int 类型,默认值0。 hours:时,int 类型,默认值0。 mins:分,int 类型,默认值0。 secs:秒,double 类型,默认值0.0。

输出:

函数返回值类型为 interval。

功能:

从年,月,周,日,时, 分, 秒域创建时间间隔。

例子:

SELECT make_interval(years := 3, months := 7);
 make_interval
----------------
 3 years 7 mons
(1 row)

8.248. MAKE_TIME

用法:

make_time(hour int, min int, sec double)

输入参数:

hour:时,int 类型,范围[0, 23]。 min:分,int 类型,范围[0, 59]。 sec:秒,double 类型,范围[0, 60]。

输出:

函数返回值类型为 time。

功能:

从时,分,秒域创建时间。

例子:

SELECT make_time(23, 59, 5.9);
    make_time
-----------------
 23:59:05.900000
(1 row)

8.249. MAKE_TIMESTAMP

用法:

make_timestamp(year int, month int, day int, hour int, min int, sec double)

输入参数:

year:年,int 类型,范围 >= 1。 month:月,int 类型,范围[1, 12]。 day:日,int 类型,范围[1, 31]。 hour:时,int 类型,范围[0, 23]。 min:分,int 类型,范围[0, 59]。 sec:秒,double 类型,范围[0, 60]。

输出:

函数返回值类型为 timestamp。

功能:

从年,月,日,时,分,秒域创建时间戳。

例子:

SELECT make_timestamp(2014,12,28,6,30,45.887);
       make_timestamp
----------------------------
 2014-12-28 06:30:45.887000
(1 row)

8.250. MAKE_TIMESTAMPTZ

用法:

make_timestamptz(year int, month int, day int, hour int, min int, sec double[, timezone text])

输入参数:

year:年,int 类型,范围 >= 1。 month:月,int 类型,范围[1, 12]。 day:日,int 类型,范围[1, 31]。 hour:时,int 类型,范围[0, 23]。 min:分,int 类型,范围[0, 59]。 sec:秒,double 类型,范围[0, 60]。 timezone:时区,text 类型。

输出:

函数返回值类型为 timestamp。

功能:

从年,月,日,时,分,秒,时区域创建时间戳。

例子:

select make_timestamptz(1973, 07, 15, 08, 15, 55.33, '+8');
       make_timestamptz
-------------------------------
 1973-07-15 08:15:55.330000+08
(1 row)

8.251. MAX

用法:

max(expression)

功能:

MAX返回 的最大值expression。您可以将其用作聚合或分析函数。

例子:

  • 聚合示例

以下示例确定hr.employees表中的最高薪水:

SELECT MAX(salary) "Maximum" FROM employees;

+---------+
| Maximum |
+=========+
| 24000   |
+---------+
  • 分析示例

以下示例为每位员工计算向与该员工相同的经理报告的员工的最高薪水。

SELECT manager_id, last_name, salary, MAX(salary) OVER (PARTITION BY manager_id) AS mgr_max FROM employees ORDER BY manager_id, last_name, salary;

+------------+-----------+--------+---------+
| MANAGER_ID | LAST_NAME | SALARY | MGR_MAX |
+============+===========+========+=========+
| 100        | Cambrault | 11000  | 17000   |
+------------+-----------+--------+---------+
| 100        | De Haan   | 17000  | 17000   |
+------------+-----------+--------+---------+
| 100        | Errazuriz | 12000  | 17000   |
+------------+-----------+--------+---------+
| 100        | Fripp     | 8200   | 17000   |
+------------+-----------+--------+---------+
| 100        | Hartstein | 13000  | 17000   |
+------------+-----------+--------+---------+
| 100        | Kaufling  | 7900   | 17000   |
+------------+-----------+--------+---------+
| 100        | Kochhar   | 17000  | 17000   |
+------------+-----------+--------+---------+
| . . .      |           |        |         |
+------------+-----------+--------+---------+

如果将此查询用谓词括在父查询中,则可以确定每个部门中薪水最高的员工:

SELECT manager_id, last_name, salary FROM (SELECT manager_id, last_name, salary, MAX(salary) OVER (PARTITION BY manager_id) AS rmax_sal FROM employees) WHERE salary = rmax_sal ORDER BY manager_id, last_name, salary;

+------------+-----------+--------+
| MANAGER_ID | LAST_NAME | SALARY |
+============+===========+========+
| 100        | De Haan   | 17000  |
+------------+-----------+--------+
| 100        | Kochhar   | 17000  |
+------------+-----------+--------+
| 101        | Greenberg | 12008  |
+------------+-----------+--------+
| 101        | Higgins   | 12008  |
+------------+-----------+--------+
| 102        | Hunold    | 9000   |
+------------+-----------+--------+
| 103        | Ernst     | 6000   |
+------------+-----------+--------+
| 108        | Faviet    | 9000   |
+------------+-----------+--------+
| 114        | Khoo      | 3100   |
+------------+-----------+--------+
| 120        | Nayer     | 3200   |
+------------+-----------+--------+
| 120        | Taylor    | 3200   |
+------------+-----------+--------+
| 121        | Sarchand  | 4200   |
+------------+-----------+--------+
| 122        | Chung     | 3800   |
+------------+-----------+--------+
| 123        | Bell      | 4000   |
+------------+-----------+--------+
| 124        | Rajs      | 3500   |
+------------+-----------+--------+
| 145        | Tucker    | 10000  |
+------------+-----------+--------+
| 146        | King      | 10000  |
+------------+-----------+--------+
| 147        | Vishney   | 10500  |
+------------+-----------+--------+
| 148        | Ozer      | 11500  |
+------------+-----------+--------+
| 149        | Abel      | 11000  |
+------------+-----------+--------+
| 201        | Fay       | 6000   |
+------------+-----------+--------+
| 205        | Gietz     | 8300   |
+------------+-----------+--------+
|            | King      | 24000  |
+------------+-----------+--------+

22 rows selected.

8.252. MD5

用法:

md5(string)

功能:

MD5用于计算给定参数的MD5哈希值,结果以十六进制输出。

例子:

以下示例返回计算给定参数的MD5哈希值:

SELECT md5('Th\000omas '::bytea);

               md5
----------------------------------
 91d24a7b16bedaecc378bae28391865e
(1 row)

8.253. MIN

用法:

min(expression)

功能:

MIN返回expr的最小值。您可以将其用作聚合或分析函数。

例子:

  • 聚合示例

以下语句返回表hr.employees中最早的雇用日期:

SELECT MIN(hire_date) "Earliest" FROM employees;

+-----------+
| Earliest  |
+===========+
| 13-JAN-01 |
+-----------+
  • 分析示例

下面的示例为每位员工确定在与员工相同日期或之前受雇的员工。然后,它确定向与该员工相同的经理报告的员工子集,并返回该子集中的最低工资。

SELECT manager_id, last_name, hire_date, salary,MIN(salary) OVER(PARTITION BY manager_id ORDER BY hire_date RANGE UNBOUNDED PRECEDING) AS p_cmin FROM employees   ORDER BY manager_id, last_name, hire_date, salary;

+------------+-----------+-----------+--------+--------+
| MANAGER_ID | LAST_NAME | HIRE_DATE | SALARY | P_CMIN |
+============+===========+===========+========+========+
| 100        | Cambrault | 15-OCT-07 | 11000  | 6500   |
+------------+-----------+-----------+--------+--------+
| 100        | De Haan   | 13-JAN-01 | 17000  | 17000  |
+------------+-----------+-----------+--------+--------+
| 100        | Errazuriz | 10-MAR-05 | 12000  | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Fripp     | 10-APR-05 | 8200   | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Hartstein | 17-FEB-04 | 13000  | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Kaufling  | 01-MAY-03 | 7900   | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Kochhar   | 21-SEP-05 | 17000  | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Mourgos   | 16-NOV-07 | 5800   | 5800   |
+------------+-----------+-----------+--------+--------+
| 100        | Partners  | 05-JAN-05 | 13500  | 7900   |
+------------+-----------+-----------+--------+--------+
| 100        | Raphaely  | 07-DEC-02 | 11000  | 11000  |
+------------+-----------+-----------+--------+--------+
| 100        | Russell   | 01-OCT-04 | 14000  | 7900   |
+------------+-----------+-----------+--------+--------+
| . . .      |           |           |        |        |
+------------+-----------+-----------+--------+--------+

8.254. MOD

用法:

mod(y,x)

功能:

MOD返回n2除以n1的余数。n1如果为 0,则返回n2。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。KingBase确定具有最高数值优先级的参数,将其余参数隐式转换为该数据类型,并返回该数据类型。

n1如果和的乘积n2为负,则此函数的行为与经典数学模函数不同。经典模数可以使用MOD具有以下公式的函数表示:

n2 - n1 * FLOOR(n2/n1)

MOD下表说明了函数和经典模数 之间的区别:

n2

n1

MOD(n2,n1)

Classical Modulus

11

4

3

3

11

-4

3

-1

-11

4

-3

1

-11

-4

-3

-3

也可以看看:FLOOR,类似于MOD,但ROUND在其公式中使用而不是FLOOR

例子:

以下示例返回 11 除以 4 的余数:

SELECT MOD(11,4) "Modulus" FROM DUAL;

+---------+
| Modulus |
+=========+
| 3       |
+---------+

8.255. MONTH

用法:

month(datetime date)

输入参数:

datetime:日期时间,date 类型。

输出:

函数返回值类型为 int。

功能:

从日期时间域获取月份。

例子:

select month('2013-7-15 14:10:30');
 month
-------
     7
(1 row)

8.256. MONTHS_BETWEEN

用法:

months_between(date date1, date date2)

输入参数:

date1:日期1,date 类型。 date2:日期2,date 类型。

输出:

函数返回值类型为 double。

功能:

计算日期1与日期2的月份差。

例子:

SELECT months_between ('2007-02-28 111111', '2007-04-30 112121');
   months_between
---------------------
 -2.0647438769414577
(1 row)

8.257. NEXT_DAY

用法:

next_day(date1 date, weekday text)

输入参数:

date1: 输入日期,date类型。 weekday: 周几, text。

输出:

函数返回值类型为 date。

功能:

获取下一个周几。

例子:

SELECT next_day ('2003-08-01 111211', 'TUESDAY');
      next_day
---------------------
 2003-08-05 11:12:11
(1 row)

8.258. NEXTVAL

用法:

nextval(regclass)

输入参数:

regclass:已经创建的序列名。

输出:

返回regclass序列的递增新值。

功能:

NEXTVAL递增序列并返回新值。

例子:

create sequence seq start with 1;
select nextval('seq');
nextval
---------
  1
(1 row)

8.259. NLSSORT

用法:

nlssort(expr,nls_param)

功能:

NLSSORT返回字符值的排序规则键char和显式或隐式指定的排序规则。排序规则键是一串字节,用于char根据指定的排序规则进行排序。排序规则键的属性是,当根据它们的二进制顺序比较时,为给定排序规则生成的两个这样的键的相互排序与根据给定排序规则比较时源字符值的相互排序相同。

char和 ' nlsparam'都可以是任何数据类型CHAR、VARCHAR、NCHAR或NVARCHAR。

'nlsparam' 的值必须具有以下形式

'NLS_SORT = collation'

其中collation是语言排序规则的名称或BINARY. NLSSORT使用指定的排序规则生成排序规则键。如果省略 ' nlsparam',则此函数使用参数的派生排序规则char。如果您指定BINARY,则此函数返回char值本身转换为RAW并可能被截断,如下所述。

如果您指定 ' lsparam',那么您可以将后缀附加到语言排序规则名称_ai以请求不区分重音的排序规则或_ci请求不区分大小写的排序规则。不建议在查询子句中使用不区分重音或不区分大小写的排序规则,ORDER BY因为它会导致不确定的排序顺序。

返回的排序规则键是RAW数据类型。char由给定排序规则的给定值产生的排序规则键的长度可能超过RAW返回值的最大长度NLSSORT。在这种情况下,NLSSORT的行为取决于初始化参数 的值 MAX_STRING_SIZE。如果MAX_STRING_SIZE = EXTENDED,则返回值的最大长度为 32767 字节。如果归类键超过此限制,则函数将失败并出现错误“ORA-12742:无法创建归类键”。如果短输入字符串包含高比例的 Unicode 字符且分解率非常高,则也可能会报告此错误。

如果 MAX_STRING_SIZE = STANDARD,则返回值的最大长度为 2000 字节。如果要返回的值超过限制,则NLSSORT计算最大前缀或初始子字符串的排序规则键,char以便计算结果不超过最大长度。例如FRENCH,对于单语排序规则,前缀长度通常为 1000 个字符。例如GENERIC_M,对于多语言排序规则,前缀通常为 500 个字符。例如,对于 Unicode 归类算法 (UCA) 归类,UCA0610_DUCET前缀通常为 285 个字符。确切的长度可能会更低或更高,具体取决于排序规则和char.

当行为MAX_STRING_SIZE = STANDARD暗示两个字符值的排序规则键(NLSSORT结果)被比较以找到语言顺序时,如果它们在前缀上没有差异,即使它们可能在某些进一步的字符位置不同,则它们被认为是相等的。因为该NLSSORT函数被隐式用于查找比较条件的语言排序,所以BETWEEN条件、IN条件、ORDER BY、GROUP BY和COUNT(DISTINCT),这些操作可能返回仅对长字符值近似的结果。如果您想保证这些操作的结果是准确的,那么将您的数据库迁移到使用MAX_STRING_SIZE = EXTENDED.

有关初始化参数 的更多信息,请参阅“扩展数据类型” 。MAX_STRING_SIZE

此函数不CLOB直接支持数据。但是,CLOBs 可以通过隐式数据转换作为参数传入。

例子:

此函数可用于指定基于语言排序序列而不是字符串的二进制值的排序和比较操作。下面的示例创建一个包含两个值的测试表,并显示函数如何对返回的值进行排序NLSSORT:

CREATE TABLE test (name VARCHAR(15));

INSERT INTO test VALUES ('Gaardiner');

INSERT INTO test VALUES ('Gaberd');

INSERT INTO test VALUES ('Gaasten');

SELECT * FROM test ORDER BY name;

+-----------+
| NAME      |
+===========+
| Gaardiner |
+-----------+
| Gaasten   |
+-----------+
| Gaberd    |
+-----------+

SELECT * FROM test ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

+-----------+
| NAME      |
+===========+
| Gaberd    |
+-----------+
| Gaardiner |
+-----------+
| Gaasten   |
+-----------+

以下示例显示了如何NLSSORT在比较操作中使用该函数:

SELECT * FROM test WHERE name > 'Gaberd' ORDER BY name;

no rows selected

SELECT * FROM test WHERE NLSSORT(name, 'NLS_SORT = XDanish') > NLSSORT('Gaberd', 'NLS_SORT = XDanish') ORDER BY name;

+-----------+
| NAME      |
+===========+
| Gaardiner |
+-----------+
| Gaasten   |
+-----------+

如果您经常NLSSORT在具有相同语言排序序列的比较操作中使用,则考虑这种更有效的替代方案:将NLS_COMP参数(对于数据库或当前会话)LINGUISTIC设置为 ,NLS_SORT并将会话的参数设置为所需的排序序列。默认情况下,KingBase数据库将使用该排序顺序进行当前会话期间的所有排序和比较操作:

ALTER SESSION SET NLS_COMP = 'LINGUISTIC';

ALTER SESSION SET NLS_SORT = 'XDanish';

SELECT * FROM test WHERE name > 'Gaberd' ORDER BY name;

+-----------+
| NAME      |
+===========+
| Gaardiner |
+-----------+
| Gaasten   |
+-----------+

8.260. NOW

用法:

now()

输入参数:

输出:

函数返回值类型为 timestamp。

功能:

获取当前时间。

例子:

SELECT now();
              now
-------------------------------
 2022-06-28 19:33:29.581229+08
(1 row)

8.261. NTH_VALUE

用法:

nth_value(value any, nth integer) over ([partition by partition_expression] [order by sort_expression [ASC|DESC]])

输入参数:

value:窗户帧的名子,通常为投影列列名。 nth: 第几行。

输出:

功能:

NTH_VALUE返回在窗口帧中的第nth行(行从1计数)上计算的value,类型与any一致。如果没有这样的行则返回空值。本函数为通用窗口函数。

例子:

SELECT nth_value(ten, four + 1) OVER (PARTITION BY four), ten, four
    FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten)s;
nth_value | ten | four
-----------+-----+------
    0 |   0 |    0
    0 |   0 |    0
    0 |   4 |    0
    1 |   1 |    1
    1 |   1 |    1
    1 |   7 |    1
    1 |   9 |    1
    |   0 |    2
    |   1 |    3
    |   3 |    3
(10 rows)

8.262. NTILE

用法:

ntile(num_buckets integer)

输入参数:

num_backet:要等分分区的个数。

输出:

记录

功能:

NTILE从1到num_backet参数值的整数范围,尽可能等分分区。

例子:

SELECT ntile(3) OVER (ORDER BY ten, four), ten, four FROM tenk1 WHERE unique2 < 10;
ntile | ten | four
-------+-----+------
  1 |   0 |    0
  1 |   0 |    0
  1 |   0 |    2
  1 |   1 |    1
  2 |   1 |    1
  2 |   1 |    3
  2 |   3 |    3
  3 |   4 |    0
  3 |   7 |    1
  3 |   9 |    1
(10 rows)

8.263. NULLIF

用法:

nullif(expr1, expr2)

输入参数:

expr1:用于判断其值是否与expr2相等的表达式,通常为列表达式。 expr2:用于判断expr1值是否与其相等的表达式,通常为常量表达式。

输出:

expr1的值,或者是NULL。

功能:

NULLIF比较expr1和expr2。如果它们相等,则函数返回null。如果它们不相等,则函数返回expr1。expr1不能指定文字‘NULL’。

例子:

select * from t1;
a
---
1
2
(2 rows)

select nullif(a, 1) from t1;
nullif
--------

  2
(2 rows)

8.264. NUMTODSINTERVAL

用法:

功能:

将输入的数字与UNIT转换为关于日期和时间的interval。

格式串见上述图片

例子:

select numtodsinterval(27 , 'hour') from dual;
   numtodsinterval
-----------------------
1 day 03:00:00.000000
(1 行记录)

8.265. NUMTOYMINTERVAL

用法:

功能:

将输入的数字与UNIT转换为关于YEAR和MONTH的interval。

格式串见上述图片

例子:

# select numtoyminterval(27 , 'month') from dual;
 numtoyminterval
-----------------
 2 years 3 mons
(1 行记录)

8.266. NVL

用法:

nvl(expr1, expr2)

输入参数:

expr1:用于判断其值是否为NULL的表达式,通常为列表达式。 expr2:用于expr1为NULL时NVL的返回值表达式,通常为常量表达式。

输出:

expr1的值,或者是expr2。

功能:

如果表达式expr1不为空,返回表达式expr1;如果expr1为空,返回表达式expr2。

例子:

select * from t1;
a
---
1
2

(3 rows)

select nvl(a, 4) from t1;
nvl
-----
1
2
4
(3 rows)

8.267. NVL2

用法:

nvl2(expr1,expr2,expr3)

输入参数:

expr1:用于判断其值是否为NULL的表达式,通常为列表达式。 expr2:用于expr1不为NULL时NVL2的返回值表达式,通常为常量表达式。 expr3:用于expr1为NULL时NVL2的返回值表达式,通常为常量表达式。

输出:

expr2的值,或者是expr3。

功能:

NVL2允许根据指定表达式是否为空来确定查询返回的值。如果表达式expr1不为空,返回表达式expr2, 如果expr1为空,返回表达式expr3。

例子:

select * from t1;
a
---
1
2

(3 rows)

select nvl2(a, 4, 5) from t1;
nvl2
------
  4
  4
  5
(3 rows)

8.268. OCTET_LENGTH

用法:

octet_length(string)

功能:

函数返回以字节计的数据字符表达的长度,字符串尾部空格字符也会被计算在内。

例子:

SELECT OCTET_LENGTH( 'abc  '::text ) "LENGTH" FROM DUAL;
+-----------+
| LENGTH    |
+===========+
| 5         |
+-----------+

8.269. OVERLAY

用法:

overlay(string placing  string from  int [for int])

功能:

将用字符串expr1中指定起始位(from后的数值)开始后的(指定长度,for后的数值)字符串,用给定的字符串expr2替换。

  • 如果有for关键字,则将expr1从from后的数位开始,到for后的数为止,替换成expr2。

  • 如果没有for关键字,则将expr1从from后的数位开始,共expr2字符串长度的子字符串,替换成expr2。

例子:

SELECT OVERLAY('1234567890' PLACING 'hom' FROM 2 FOR 4);
+-----------+
| overlay   |
+===========+
| 1hom67890 |
+-----------+
SELECT OVERLAY('Txxxxas' PLACING 'hometown' FROM 2 );
+-----------+
| overlay   |
+===========+
| Thometown |
+-----------+

8.270. PERCENT_RANK

用法:

聚合语法

percent_rank_aggregate:

分析语法

percent_rank_analytic:

功能:

PERCENT_RANK类似于CUME_DIST(累积分布)函数。返回值的范围PERCENT_RANK是 0 到 1,包括 0 到 1。任何集合中的第一行的 aPERCENT_RANK为 0。返回值为NUMBER。

  • 作为聚合函数,对于由函数的参数和相应的排序规范标识PERCENT_RANK的假设行,计算行的秩减 1 除以聚合组中的行数。这个计算就像假设的行被插入到KingBase数据库要聚合的行组中一样。

  • 该函数的参数标识每个聚合组中的单个假设行。因此,它们必须全部计算为每个聚合组中的常量表达式。常量参数表达式和ORDER BY聚合子句中的表达式按位置匹配。因此,参数的数量必须相同,并且它们的类型必须兼容。

  • 作为一个分析函数,对于 row r,PERCENT_RANK计算排名为r负 1,除以 1 小于被评估的行数(整个查询结果集或分区)。

例子:

  • 聚合示例

以下示例计算样本表中假设员工的百分比排名,hr.employees工资为 15,500 美元,佣金为 5%:

SELECT PERCENT_RANK(15000, .05) WITHIN GROUP (ORDER BY salary, commission_pct) "Percent-Rank" FROM employees;

+--------------+
| Percent-Rank |
+==============+
| .971962617   |
+--------------+
  • 分析示例

以下示例为每位员工计算部门内员工薪水的百分比排名:

SELECT department_id, last_name, salary, PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS pr FROM employees ORDER BY pr, salary, last_name;

+---------------+-----------+------------+-------+------------+
| DEPARTMENT_ID | LAST_NAME | SALARY     | PR    |            |
+===============+===========+============+=======+============+
|               | 10        | Whalen     | 4400  | 0          |
+---------------+-----------+------------+-------+------------+
|               | 40        | Mavris     | 6500  | 0          |
+---------------+-----------+------------+-------+------------+
|               | Grant     | 7000       | 0     |            |
+---------------+-----------+------------+-------+------------+
|               | 80        | Vishney    | 10500 | .181818182 |
+---------------+-----------+------------+-------+------------+
|               | 80        | Zlotkey    | 10500 | .181818182 |
+---------------+-----------+------------+-------+------------+
|               | 30        | Khoo       | 3100  | .2         |
+---------------+-----------+------------+-------+------------+
|               | 50        | Markle     | 2200  | .954545455 |
+---------------+-----------+------------+-------+------------+
|               | 50        | Philtanker | 2200  | .954545455 |
+---------------+-----------+------------+-------+------------+
|               | 50        | Olson      | 2100  | 1          |
+---------------+-----------+------------+-------+------------+
| . . .         |           |            |       |            |
+---------------+-----------+------------+-------+------------+

8.271. PI

用法:

pi()

功能:

返回一个π的double类型值

此函数将返回一个double类型的表示π的值。

例子:

以下示例演示生成一个π的double类型值。

SELECT pi();
  pi
-------------------
3.141592653589793
(1 行记录)

8.272. POSITION

用法:

position(substring in string)

功能:

返回指定子串的位置

例子:

SELECT position('\000om'::bytea in 'Th\000omas'::bytea);

 position
----------
        3
(1 row)

8.273. POWER

用法:

power(a dp, b dp)
power(a numeric, b numeric)

功能:

返回 a 的 b 次幂

例子:

SELECT power(8, 3.0);

        power
----------------------
 512.0000000000000000
(1 row)

8.274. QUERY_TO_XML

用法:

query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)

功能:

query_to_xml执行由参数query传递的查询并且映射结果集.

例子:

如果tableforest为假,则结果的 XML 文档看起来像这样:

 <tablename>

   <row>

     <columnname1>data</columnname1>

     <columnname2>data</columnname2>

   </row>

   <row>

    ...

   </row>

 ...

 </tablename>

 如果tableforest为真,结果是一个看起来像这样的 XML 内容片断:

 <tablename>

   <columnname1>data</columnname1>

   <columnname2>data</columnname2>

 </tablename>

 <tablename>

 ...

 </tablename>

8.275. QUOTE_IDENT

用法:

quote_ident(string text)

功能:

将给定字符串返回成合适的引用形式,使它可以在一个 SQL 语句字符串中被用作一个标识符。只有需要时才会加上引号(即,如果字符串包含非标识符字符或可能是大小写折叠的)。嵌入的引号会被正确地双写。

例子:

SELECT quote_ident('Foo bar');
 quote_ident
-------------
 "Foo bar"
(1 row)

8.276. QUOTE_LITERAL

用法:

quote_literal(string text)

功能:

将给定字符串返回成合适的引用形式,使它可以在一个 SQL 语句字符串中被用作一个字符串文字。嵌入的引号会被正确地双写。注意quote_literal对空输入返回空; 如果参数可能为 空,quote_nullable 通常更合适。

例子:

SELECT quote_literal(E'O’Reilly');
 quote_literal
---------------
 'O’Reilly'
(1 row)

8.277. QUOTE_NULLABLE

用法:

quote_nullable(string text)
quote_nullable(value anyelement)

功能:

  • 将给定字符串返回成合适的引用形式,使它可以在一个 SQL 语句 字符串中被用作一个字符串文字;或者,如果参数为空,返回 NULL。嵌入的引号会被正确地双写

  • 强迫给定值为文本并且接着将它用引号包围作为一个文本;或者,如果参数为空,返回 NULL。嵌入的单引号和反斜线被正确的双写。

例子:

SELECT quote_nullable(NULL);
  quote_nullable
----------------
 NULL
(1 row)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值