Oracle sql日期比较及函数
oracle sql日期比较:
在今天之前:
select * from abtable where TS < to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') AND TS <= to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
在今天之后:
select * from abtable where TS > to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') AND TS >= to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
如果TS字段为
ts CHAR(19) default to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
可以直接用日期查询:
select * from bd_corp where PK_CORP IN(1015,1156) AND TS < '2017-12-31 23:59:59' AND TS > '2015-01-01 00:00:00'
精确时间:
select * from TESTTB where CREATE = to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
between 操作符
-- 在where 子句中使用,选取介于两个值之间的数据范围,这些值可以是数字,文本,日期
------- 不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。
------- 某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;
------- 某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;
------- 而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。
在某段时间内:
select * from TESTTB where CREATE between to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update < to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') and update > to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
或者
select * from bd_corp where PK_CORP IN(1015,1156) AND TS < '2017-12-31 23:59:59' AND TS > '2015-01-01 00:00:00'
Oracle 获取当前日期及日期格式
获取系统日期: SYSDATE()
格式化日期:
TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)
或 TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)
格式化数字:
TO_NUMBER
注: TO_CHAR 把日期或数字转换为字符串
TO_CHAR(number, '格式')
TO_CHAR(salary, '$99,999.99')
TO_CHAR(date, '格式')
TO_DATE 把字符串转换为数据库中的日期类型
TO_DATE(char, '格式')
TO_NUMBER 将字符串转换为数字
TO_NUMBER(char, '格式')
返回系统日期:
SQL> select sysdate from dual;
SYSDATE
--------------
03-7月 -18
mi是分钟
SQL> select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2018-07-03 11:15:59
mm会显示月份
SQL> select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MM:SS'
--------------------------------------
2018-07-03 11:07:39
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual ;
TO_CHAR(SYSDATE,'YY-MM-DDHH24:MI:S
----------------------------------
18-07-03 11:17:09
转换的格式:
表示 year 的:y 表示年的最后一位 、
yy 表示年的最后2位 、
yyy 表示年的最后3位 、
yyyy 用4位数表示年
表示month的: mm 用2位数字表示月 、
mon 用简写形式, 比如11月或者nov 、
month 用全称, 比如11月或者november
表示day的:dd 表示当月第几天 、
ddd 表示当年第几天 、
dy 当周第几天,简写, 比如星期五或者fri 、
day 当周第几天,全称, 比如星期五或者friday
表示hour的:hh 2位数表示小时 12进制、
hh24 2位数表示小时 24小时
表示minute的:mi 2位数表示分钟
表示second的:ss 2位数表示秒 60进制
表示季度的:q 一位数 表示季度 (1-4)
另外还有ww 用来表示当年第几周 w用来表示当月第几周。
24小时制下的时间范围:00:00:00-23:59:59
12小时制下的时间范围:1:00:00-12:59:59
数字格式: 9 代表一个数字
0 强制显示0
$ 放置一个$符
L 放置一个浮动本地货币符
. 显示小数点
, 显示千位指示符
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual;
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual;
当前时间减去7天的时间
select sysdate - interval '7' day from dual;
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual;
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual;
含义解释:
Dual伪列
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。
不同系统可能返回日期的格式不一样。
返回当前连接的用户:select user from dual;
1、上月末天:
SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
LASTDAY
--------------------
2018-06-30
2、上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
PRETODAY
--------------------
2018-06-03
3、上月首天
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
FIRSTDAY
--------------------
2018-06-01
4、按照每周进行统计
SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');
TO_C
----
27
5、按照每月进行统计
SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');
TO_C
----
07
6、按照每季度进行统计
SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');
TO
--
3
7、按照每年进行统计
SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');
TO_CHAR(
--------
2018
8、要找到某月中所有周五的具体日期
SQL> select to_char(t.d,'YY-MM-DD') from (
2 select trunc(sysdate, 'MM')+rownum-1 as d
3 from dba_objects
4 where rownum < 32) t
5 where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期
6 and trim(to_char(t.d, 'Day')) = '星期五'
7 ;
TO_CHAR(T.D,'YY-
----------------
18-07-06
18-07-13
18-07-20
18-07-27
如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。
Tag标签:「oracle 函数 时间 日期」更新时间:「2021-11-03 16:49:53」阅读次数:「1070」