VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

宏变量

功能描述

系统提供的宏变量包括SYSDATE,DBTIMEZONE,SESSIONTIMEZONE和SYSTIMESTAMP,ROWNUM,ROWID。

  • SYSDATE:获取当前系统时期。
  • DBTIMEZON:返回数据库时区。
  • SESSIONTIMEZONE:返回当前会话时区。
  • SYSTIMESTAMP:返回本机数据库上当前系统日期和时间,精确到毫秒。
  • ROWNUM:获取查询结果中的元组序号。
  • ROWID:获取一条记录的一个相对唯一地址值。ROWID是一个伪列,该值表明了该行在数据库中的详细物理地址,通过ROWID,数据库可以快速定位某行具体数据的位置。

    • 宏变量ROWID仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。
    • 子查询中也可以使用ROWID。

示例

SYSDATE

SELECT sysdate FROM dual;

返回结果为:

       sysdate       
---------------------
 2020-09-26 00:44:05
(1 row)

DBTIMEZONE

SELECT dbtimezone;

返回结果为:

 dbtimezone
------------
 PRC
(1 row)

SESSIONTIMEZONE

SELECT sessiontimezone;

返回结果为:

 sessiontimezone
-----------------
 PRC
(1 row)

SYSTIMESTAMP

SELECT systimestamp;

返回结果为:

       sysdate
---------------------
 2024-05-17 15:40:39
(1 row)

ROWNUM

1、创建临时表并插入数据。

CREATE TEMPORARY TABLE empsalary (
depname varchar,
empno bigint,
salary int,
enroll_date date
);
INSERT INTO empsalary VALUES
('develop', 10, 5200, '2007-08-01'),
('sales', 1, 5000, '2006-10-01'),
('personnel', 5, 3500, '2007-12-10'),
('sales', 4, 4800, '2007-08-08'),
('personnel', 2, 3900, '2006-12-23'),
('develop', 7, 4200, '2008-01-01'),
('develop', 9, 4500, '2008-01-01'),
('sales', 3, 4800, '2007-08-01'),
('develop', 8, 6000, '2006-10-01'),
('develop', 11, 5200, '2007-08-15');

2、执行查询语句。

SELECT rownum,depname,empno,salary FROM empsalary WHERE rownum <3;

返回结果为:

 rownum | depname | empno | salary
--------+---------+-------+--------
      1 | develop |    10 |   5200
      2 | sales   |     1 |   5000
(2 rows)

ROWID

1、创建测试表并插入数据。

CREATE TABLE t01(id int,name varchar2(32));
INSERT INTO t01(id,name) VALUES(1,'a'),(2,'b'),(3,'c'),(4,'d');

2、查询ROWID。

 SELECT rowid,t.* FROM (SELECT a.* FROM t01 a) t;

返回结果为:

        rowid         | id | name
----------------------+----+------
 h1IAAA==AAAAAA==AQA= |  1 | a
 h1IAAA==AAAAAA==AgA= |  2 | b
 h1IAAA==AAAAAA==AwA= |  3 | c
 h1IAAA==AAAAAA==BAA= |  4 | d
(4 rows)

3、子查询外层支持ROWID。

SELECT rowid AS rowid_2,t.* FROM (SELECT rowid,a.* FROM t01 a) t;

返回结果为:

       rowid_2        |        rowid         | id | name
----------------------+----------------------+----+------
 h1IAAA==AAAAAA==AQA= | h1IAAA==AAAAAA==AQA= |  1 | a
 h1IAAA==AAAAAA==AgA= | h1IAAA==AAAAAA==AgA= |  2 | b
 h1IAAA==AAAAAA==AwA= | h1IAAA==AAAAAA==AwA= |  3 | c
 h1IAAA==AAAAAA==BAA= | h1IAAA==AAAAAA==BAA= |  4 | d
(4 rows)

清理环境

DROP TABLE t01, empsalary;