DUAL是oracle中非常神奇的一张表,有好多人用了很久oracle都不知道dual是干什么的,因为不是自己设计的表,一般处理的SQL也用不到。这里简单说下DUAL的用法,知道之后很多情况下DUAL查询还是很方便的。
一、DUAL简介:
1. DUAL是一个单行单列的虚拟表,是sys用户下的一张内部表,所有用户都可以使用DUAL名称访问,无论什么时候这个表总是存在
2. 常用在没有目标表的select语句块,用来构成select的语法规则
3. DUAL里面永远只有一条记录
4. DUAL表主要用来选择系统变量或求一个表达式的值
5. DUAL就是个一行一列的表,如果你往里执行insert、delete、truncate、drop等操作会导致很多程序出问题,可以执行,但是执行后会引发很多问题。
二、DUAL常见用法:
DESC DUAL;--查看DUAL表结构
SELECT sysdate FROM DUAL;--获取当前系统日期
SELECT user FROM DUAL;--获取当前用户
SELECT to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) FROM DUAL;--获取当前系统日期(指定格式)
SELECT SYS_CONTEXT('USERENV','TERMINAL') FROM DUAL;--获得主机名
SELECT SYS_CONTEXT('USERENV','language') FROM DUAL;--获得当前 locale
SELECT to_char(sysdate,'IW') FROM DUAL;--获取当前日期,按照IW算法查看当前是第几周,一般用于创建表分区时查看当前周时间
注:参数中使用IW算法查询周数。IW算法为自然周,星期一到星期日为一周。且每年的第一个星期天为第一周,这样会把去年的最后几天当成今年的第一周日期。
另外还有WW算法。WW的算法为每年1月1日为第一周开始日,每一周开始日+6为一周结尾日。例如20210101为第一周的第一天,而第一周的最后一天为20210101+6=20210107。一般公司开发中多采用IW算法取周数。
3、to_char函数、to_number 函数、to_date 函数:
oracle中to_char函数的功能是将数值型或者日期型转化为字符型
to_number 字符转换为数字
to_date 字符转换为日期
4、to_char()函数常见使用:
select pack_id,to_char(crtdatetime,'MM/YY') from pckinfo where sender = 'AICP2AMTP'
2052062070012 05/21
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss am') from dual
2021-05-04 17:21:21 下午
select to_char(to_date('20-3月-21'),'yyyy-mm-dd hh24:mi:ss am') from dual
2021-03-20 00:00:00 上午
select to_char(sysdate,'dd "of" month') from dual
04 of 5月
select to_char(syadate,'yyyy-mm-dd cc') from dual
2021-05-04 21
注:cc是世纪,如当前是21世纪。
select to_char(sysdate,'yy-mm-dd cc') from dual
21-05-04 21
select to_char(sysdate,'y,yyy-mm-dd cc') from dual
2,021-05-04 21