所谓 dual
其实不是函数,而是一个虚拟表。
一、什么是 dual
?
比如:
SELECT 1+1 FROM dual;
-- 返回结果:2
如果没有 dual
,你必须随便找一个表才能写 SELECT
,这很麻烦。
二、在达梦数据库里的用法
在 DM 里,dual
也是存在的(兼容 Oracle 习惯),所以你可以这样:
SELECT SUBSTR('DamengDatabase', 1, 6) FROM dual;
-- 结果:Dameng
或者:
SELECT SYSDATE FROM dual;
-- 获取当前时间
三、什么时候用 dual
?
- 测试函数或表达式
不需要表时,可以用dual
作为“占位表”。SELECT UPPER('hello') FROM dual; -- HELLO
- 获取系统函数值
SELECT CURRENT_DATE FROM dual;
- 做简单计算
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
就是一个虚拟表,用来执行函数、表达式测试,而不用依赖实际业务表。- 常见用途:字符串处理、日期计算、数学运算、系统信息查询、表达式测试。