oracle中查询当前系统时间用到的dual是什么?

Oracle中DUAL表的应用
本文介绍了Oracle数据库中DUAL表的基本概念及其多种用途,包括查询系统时间、进行简单的数学运算、格式化数字及日期等操作。DUAL表作为一张特殊的单行单列表,在进行各种测试或获取系统信息时非常实用。

oracle我们查询当前系统时间的时候,经常用到dual,这个是什么东西呢?

-- 查询系统时间    结果:2018/04/17 15:00:48 --
select sysdate from dual;
-- 字符串转日期格式   结果: 2018/04/16 --
select to_date('2018-04-16','yyyy-MM-dd HH24:mi:ss') from dual;
-- 日期转字符串格式  结果:2018-04-17 15:01:11--
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
-- 数字格式化  结果:123,456,789 --
select to_char(123456789,'999,999,999,999') from dual;
-- 数字添加$符号  结果:$123.0--
select to_char(123,'$99,999.9') from dual;

dual是Oracle中的一个伪表,利用这个伪表可以设置或查看序列,或者是调用一些内置的函数,方便操作。

简单来说,dual表就是oracle与数据字典自动创建的一张表,这张表是一个单行单列的表,这个表只有1列:DUMMY,

数据类型为VERCHAR2(1),dual表中只有一个数据'X', Oracle有内部逻辑保证dual表中永远只有一条数据。

dual表主要是用来选择系统变量或是求一个表达式的值。

如:

1) 获取当前系统时间

select sysdate from dual;

2)计算器使用

select 2*5 result from dual;

参考地址:

https://zhidao.baidu.com/question/170487574.html

转载于:https://www.cnblogs.com/xielong/p/8866986.html

<think>嗯,用户需要Oracle查询当前日期上一个月的SQL语句,明确提到了ADD_MONTHS函数和示例。引用[1]展示了ADD_MONTHS的基本用法:给特定日期加减月份,但用户要的是动态当前日期的处理。引用[3]补充了关键细节:函数对月末日期的特殊处理规则,这个必须包含在回答里。用户似乎熟悉基础语法,但可能没意识到月末边界情况。应该强调两个重点:一是sysdate获取当前日期,二是用负数参数回溯月份。需要给出最简示例和应对月末场景的说明。考虑设计三层示例:基础写法(直接-1)、格式化版(显示年月)、以及特意演示的月末案例。这样既解决核心需求,又预防用户可能遇到的日期陷阱。准备在最后附加TRUNC的说明,因为引用[2]提到日期截断函数,用户未来做月度统计时可能用到。</think> 在Oracle数据库中获取当前日期上一个月的日期,可以使用 `ADD_MONTHS()` 函数结合 `SYSDATE`。以下是具体方法及示例: ### 📅 核心语法 ```sql SELECT ADD_MONTHS(SYSDATE, -1) AS PREVIOUS_MONTH FROM DUAL; ``` ### 📝 详细说明及示例 1. **基础用法** 直接获取当前日期的上个月同一天: ```sql -- 示例:今天是2024-07-15,返回2024-06-15 SELECT ADD_MONTHS(SYSDATE, -1) AS PREV_MONTH FROM DUAL; ``` 2. **处理月末日期** 若当前日期是月末(如2024-03-31),函数会自动返回上月最后一天(2024-02-29)[^3]: ```sql -- 示例:当前日期是2024-03-31,返回2024-02-29 SELECT ADD_MONTHS(DATE '2024-03-31', -1) FROM DUAL; ``` 3. **精确到月初/月末** * **获取上个月第一天**: ```sql SELECT TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM') AS PREV_MONTH_START FROM DUAL; -- 示例返回:2024-06-01 ``` * **获取上个月最后一天**: ```sql SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -1)) AS PREV_MONTH_END FROM DUAL; -- 示例返回:2024-06-30 ``` 4. **格式化输出** 按 `YYYY-MM` 格式显示上个月年份和月份: ```sql SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM') AS PREV_MONTH_STR FROM DUAL; -- 示例返回:2024-06 ``` > ⚠️ **关键注意点** > - `ADD_MONTHS(SYSDATE, N)` 中 `N` 为负表示回溯月份,正数表示推进月份[^1][^3] > - 函数会自动处理不同月份的天数差异(如2月闰年)[^3] > - 结果始终为 `DATE` 类型,用 `TO_CHAR` 可转文本格式 ### 相关问题 1. 如何用 `ADD_MONTHS` 计算季度初/季度末日期? 2. `TRUNC(SYSDATE, 'MM')` 和 `ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)` 有何区别? 3. 如何避免 `ADD_MONTHS` 在跨年计算时出错? [^1]: ADD_MONTHS基础用法示例 [^3]: 月末处理规则及返回值类型说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值