所谓 dual 其实不是函数,而是一个虚拟表

一、什么是 dual

  • Oracle达梦数据库(DM) 里,dual 是系统自带的一个只有 一行一列 的虚拟表。
  • 它最初是为了方便写测试 SQL 或者执行不依赖实际业务表的函数。

比如:

SELECT 1+1 FROM dual;
-- 返回结果:2

如果没有 dual,你必须随便找一个表才能写 SELECT,这很麻烦。

二、在达梦数据库里的用法

在 DM 里,dual 也是存在的(兼容 Oracle 习惯),所以你可以这样:

SELECT SUBSTR('DamengDatabase', 1, 6) FROM dual;
-- 结果:Dameng

或者:

SELECT SYSDATE FROM dual;
-- 获取当前时间

三、什么时候用 dual

  1. 测试函数或表达式
    不需要表时,可以用 dual 作为“占位表”。 SELECT UPPER('hello') FROM dual; -- HELLO
  2. 获取系统函数值 SELECT CURRENT_DATE FROM dual;
  3. 做简单计算 SELECT 2*3 FROM dual; -- 6

四、达梦数据库 dual 常见用法清单

下面我来整理一个 达梦数据库里 dual 常用用法清单,以后大家测试函数或写 SQL 时可以直接套用。

1. 字符串函数测试

-- 截取字符串
SELECT SUBSTR('DamengDatabase', 1, 6) FROM dual;
-- 结果: Dameng

-- 转大写
SELECT UPPER('dameng') FROM dual;
-- 结果: DAMENG

-- 转小写
SELECT LOWER('DATABASE') FROM dual;
-- 结果: database

-- 字符串长度
SELECT LENGTH('达梦数据库') FROM dual;
-- 结果: 5

2. 日期与时间函数

-- 当前日期
SELECT CURRENT_DATE FROM dual;

-- 当前时间戳
SELECT CURRENT_TIMESTAMP FROM dual;

-- 系统日期(和 Oracle 一样)
SELECT SYSDATE FROM dual;

-- 日期加减
SELECT SYSDATE + 7 FROM dual;   -- 当前日期加7天

3. 数值计算

-- 简单运算
SELECT 2*3+5 FROM dual;
-- 结果: 11

-- 四舍五入
SELECT ROUND(123.456, 2) FROM dual;
-- 结果: 123.46

-- 取整
SELECT FLOOR(12.98), CEIL(12.01) FROM dual;
-- 结果: 12, 13

4. 系统信息

-- 当前用户
SELECT USER FROM dual;

-- 数据库版本
SELECT VERSION() FROM dual;

5. 条件与表达式测试

-- CASE表达式
SELECT CASE WHEN 1=1 THEN 'YES' ELSE 'NO' END FROM dual;

-- NVL函数(空值替换)
SELECT NVL(NULL, 'default_value') FROM dual;
-- 结果: default_value

总结:

  • dual 就是一个虚拟表,用来执行函数、表达式测试,而不用依赖实际业务表。
  • 常见用途:字符串处理、日期计算、数学运算、系统信息查询、表达式测试