更新时间:2025-09-12 GMT+08:00
分享

其他函数

ANY_VALUE

ANY_VALUE(ANY arg)

描述:返回每个分组中指定列的第一条数据。

返回值类型:任意类型

示例:

m_db=# CREATE TABLE t1 (c1 INT, c2 INT);
CREATE TABLE

m_db=# INSERT INTO t1 VALUES(1, NULL), (1, 18), (2, 17), (2, 22);
INSERT 0 4

m_db=# SELECT * FROM t1;
 c1 | c2
----+----
  1 |
  1 | 18
  2 | 17
  2 | 22
(4 rows)

m_db=# SELECT ANY_VALUE(c2) FROM t1 GROUP BY c1;
 any_value
-----------

        17
(2 rows)

m_db=# DROP TABLE t1;

ATTNAME_EQ_MYSQL

attname_eq_mysql(name1, name2)

描述:如果name1等于name2(忽略大小写),返回true;否则,返回false。

返回值类型:BOOL

示例:

1
2
3
4
5
m_db=# SELECT attname_eq_mysql('abc', 'ABC');
 attname_eq_mysql 
------------------
 t
(1 row)

BENCHMARK

BENCHMARK(INT count, expr)

描述:重复计算expr表达式count次,通过这种方式评估expr表达式的执行效率。正常场景下,函数的返回值始终为0,但可以根据客户端提示的执行时间控制BENCHMARK总共执行所消耗的时间。BENCHMARK函数只能测量数字表达式(scalar expression)的性能,表达式可以为一个子查询,但子查询返回的结果只能是单值。

返回值类型:INT

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
m_db=# CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT DEFAULT 18);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "employee_pkey" for table "employee"
CREATE TABLE
m_db=# INSERT INTO employee VALUES(2, 'Bob', 36),(3, 'John', 25),(5, 'Mary', 25),(4, 'Michael', 36),(1, 'Tom', 25);
INSERT 0 5
m_db=# \timing on
Timing is on.
m_db=# SELECT BENCHMARK(1000000, ABS(age)) FROM employee;
 benchmark 
-----------
         0
         0
         0
         0
         0
(5 rows)

Time: 2769.498 ms
m_db=# \timing off
Timing is off.
m_db=# DROP TABLE employee;
DROP TABLE

COLLATION

COLLATION (TEXT str)

描述:返回指定的字符串的排序规则。

返回值类型:TEXT

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
mdb=# SELECT COLLATION('Gauss');
     collation      
--------------------
 utf8mb4_general_ci
(1 row)

mdb=# SELECT COLLATION(_BINARY'Gauss');
 collation 
-----------
 binary
(1 row)

mdb=# SELECT COLLATION(_GBK'Gauss');
   collation    
----------------
 gbk_chinese_ci
(1 row)

CONNECTION_ID

CONNECTION_ID()

描述:返回当前连接的客户端会话ID。

返回值类型:BIGINT UNSIGNED

示例:

m_db=# SELECT connection_id();
  connection_id  
-----------------
 140598681532160
(1 row)

DATABASE

DATEBASE()

描述:返回当前数据库(Schema)的名称。

返回值类型:TEXT

示例:

m_db=# SELECT DATABASE();
 database 
----------
 public
(1 row)

DEFAULT

DEFAULT(col_name)

描述:返回指定列col_name的默认值。如果col_name没有设置默认值且没有指定NOT NULL,则返回NULL;如果col_name无默认值且定义NOT NULL则报错。

返回值类型:任意类型

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
m_db=# CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT DEFAULT 18);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "employee_pkey" for table "employee"
CREATE TABLE
m_db=# INSERT INTO employee VALUES(2, 'Bob', 36),(3, 'John', 25),(5, 'Mary', 25),(4, 'Michael', 36),(1, 'Tom', 25);
INSERT 0 5
m_db=# SELECT DEFAULT(age) FROM employee;
 default 
---------
      18
      18
      18
      18
      18
(5 rows)

m_db=# DROP TABLE employee;
DROP TABLE

FOUND_ROWS

FOUND_ROWS()

描述:返回当前连接前一条查询语句执行结果的行数,当前一条查询语句使用SQL_CALC_FOUND_ROWS关键字配合使用时,前一条查询语句中的即使存在LIMIT子句,FOUND_ROWS函数也将返回所有行数,前一条语句不是SELECT形式的查询语句时,FOUND_ROWS函数的返回值是未定义的。

返回值类型:BIGINT

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
m_db=# CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "employee_pkey" for table "employee"
CREATE TABLE
m_db=# INSERT INTO employee VALUES(2, 'Bob', 36),(3, 'John', 25),(5, 'Mary', 25),(4, 'Michael', 36),(1, 'Tom', 25);
INSERT 0 5
m_db=# SELECT * FROM employee;
 id |  name   | age 
----+---------+-----
  2 | Bob     |  36
  3 | John    |  25
  5 | Mary    |  25
  4 | Michael |  36
  1 | Tom     |  25
(5 rows)

m_db=# SELECT FOUND_ROWS();
 found_rows 
------------
          5
(1 row)

m_db=# SELECT * FROM employee LIMIT 3;
 id | name | age 
----+------+-----
  2 | Bob  |  36
  3 | John |  25
  5 | Mary |  25
(3 rows)

m_db=# SELECT FOUND_ROWS();
 found_rows 
------------
          3
(1 row)

m_db=# SELECT * FROM employee LIMIT 7;
 id |  name   | age 
----+---------+-----
  2 | Bob     |  36
  3 | John    |  25
  5 | Mary    |  25
  4 | Michael |  36
  1 | Tom     |  25
(5 rows)

m_db=# SELECT FOUND_ROWS();
 found_rows 
------------
          5
(1 row)

m_db=# SELECT SQL_CALC_FOUND_ROWS * FROM employee LIMIT 3;
 id | name | age 
----+------+-----
  2 | Bob  |  36
  3 | John |  25
  5 | Mary |  25
(3 rows)

m_db=# SELECT FOUND_ROWS();
 found_rows 
------------
          5
(1 row)

m_db=# DROP TABLE employee;
DROP TABLE

LAST_INSERT_ID

  • last_insert_id()

    描述:返回当前会话最近一次执行的INSERT语句中,成功插入AUTO_INCREMENT列的第一个自动生成的值。

    返回值类型:BIGINT UNSIGNED

    示例:

    m_db=# CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT AUTO_INCREMENT UNIQUE) AUTO_INCREMENT=10;
    NOTICE:  CREATE TABLE will create implicit sequence "t1_c2_seq" for serial column "t1.c2"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"
    NOTICE:  CREATE TABLE / UNIQUE will create implicit index "t1_c2_key" for table "t1"
    CREATE TABLE
                                      ^
    m_db=# INSERT INTO t1(c1) VALUES(1), (2), (3);
    INSERT 0 3
    
    m_db=# SELECT last_insert_id();
     last_insert_id 
    ----------------
     10
    (1 row)
    m_db=# DROP TABLE t1;
    DROP TABLE
  • last_insert_id(expr)

    描述:将last_insert_id(expr)函数的返回值作为再次执行last_insert_id()函数的返回值进行返回。若expr为NULL,则last_insert_id(expr)返回NULL,再次执行last_insert_id()函数,返回值为0。

    返回值类型:BIGINT UNSIGNED

    示例:

    m_db=# SELECT last_insert_id(100);
     last_insert_id 
    ----------------
     100
    (1 row)
    
    m_db=# SELECT last_insert_id();
     last_insert_id 
    ----------------
     100
    (1 row)

ROW_COUNT

ROW_COUNT()

描述:返回上一条语句影响行数。对于DDL语句,直接返回0;除SELECT之外的DML语句,返回影响的实际行数,SELECT语句返回-1,其中SELECT INTO返回实际影响行数。

返回值类型:BIGINT

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
m_db=# CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "employee_pkey" for table "employee"
CREATE TABLE
m_db=# INSERT INTO employee VALUES(2, 'Bob', 36),(3, 'John', 25),(5, 'Mary', 25),(4, 'Michael', 36),(1, 'Tom', 25);
INSERT 0 5
m_db=# SELECT ROW_COUNT();
 row_count 
-----------
         5
(1 row)

m_db=# UPDATE employee SET age=26 WHERE age=25;
UPDATE 3
m_db=# SELECT ROW_COUNT();
 row_count 
-----------
         3
(1 row)

m_db=# DELETE FROM employee WHERE age=36;
DELETE 2
m_db=# SELECT ROW_COUNT();
 row_count 
-----------
         2
(1 row)

m_db=# DROP TABLE employee;
DROP TABLE

SCHEMA

SCHEMA()

描述:返回当前Schema(数据库)的名称。

返回值类型:TEXT

示例:

m_db=# SELECT SCHEMA();
 schema
--------
 public
(1 row)

SLEEP

SLEEP(INT duration)

描述:使执行该函数的会话按照指定的秒数休眠。

返回值类型:BIGINT

示例:

1
2
3
4
5
m_db=# SELECT SLEEP(1);
 sleep 
-------
     0
(1 row)

SYSTEM_USER

SYSTEM_USER()

描述:返回一个UTF8编码的字符串,该字符串内容包含当前客户端使用的当前账户的用户名和当前客户端主机的ip地址,格式为username@ip。

返回值类型:TEXT

示例:

1
2
3
4
5
m_db=# SELECT SYSTEM_USER();
  system_user  
---------------
 oms@localhost
(1 row)

UUID

UUID()

描述:返回一个根据RFC 4122、ISO/IEF 9834-8:2005以及相关标准定义的通用唯一标识符(UUID)。这个标识符是一个小写十六进制数字组成的字符串,该字符串由一组8位数字、三组4位数字和一组12位数字组成,总共32个数字代表128位。

返回值类型:VARCHAR

示例:

m_db=# SELECT UUID();
                 uuid                 
--------------------------------------
 b28d6aaa-7a3a-c03c-f812-fa163e6cc336
(1 row)

UUID_SHORT

UUID_SHORT()

描述:返回一个在一定条件下具有唯一性的短通用标识符。这个标识符是一个64位无符号类型的整数。

在满足下列条件时,返回的值是唯一的:

  • 当前集群下的服务节点数不能超过256个。
  • 不能在节点重新启动之间设置服务器主机的系统时间。
  • 在节点重新启动之间平均每秒调用UUID_SHORT()少于1600万次。

返回值类型:UINT64

示例:

1
2
3
4
5
m_db=# SELECT UUID_SHORT();
      uuid_short      
----------------------
 13863614461119561729
(1 row)

相关文档