oracle、mysql、PostgreSQL有关时间查询和时间切割
2017-10-01 17:20
691 查看
oracle
--日期转换: SELECT COUNT(*) FROM MY_TABLE T WHERE T.DATE_UPDATED >= TO_DATE('2015-11-19 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND T.DATE_CREATED <= TO_DATE('2015-11-19 23:59:59', 'yyyy-mm-dd hh24:mi:ss'); --long转换为时间格式: SELECT TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') + 1458542220000 / (24 * 60 * 60 * 1000) + +TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE), 1, 3)) / 24 FROM DUAL; --月份加减: SELECT add_months(SYSDATE,-14) FROM DUAL; --TIMESTAMP时间格式 SELECT * FROM V$ACTIVE_SESSION_HISTORY T WHERE T.SAMPLE_TIME > TO_TIMESTAMP('2017-05-18 16:41:00', 'YYYY-MM-DD HH24:MI:SS') AND T.SAMPLE_TIME < TO_TIMESTAMP('2017-05-18 16:43:00', 'YYYY-MM-DD HH24:MI:SS')
mysql
SELECT COUNT(*) FROM MY_TABLE T WHERE T.CREATED_DATE >= '2016-08-12 09:12:00' AND T.CREATED_DATE < '2016-08-12 10:12:00'; --大于一月前 SELECT COUNT(*) FROM MY_TABLE T WHERE T.CREATED_DATE > DATE_SUB(now(), INTERVAL 1 month); select date_add(now(), interval 1 minute); --一分钟后 select date_add(now(), interval 1 second); --一秒后 select date_add(now(), interval 1 week); --一周后 --获取当前时间的秒数: SELECT TIMESTAMPDIFF(SECOND, '1970-1-1 8:0:0', NOW()); --1506847510
PostgreSQL
--当前时间 select current_time; --"16:40:25.083395+08" select now(); --"2017-10-01 16:41:03.689542+08" --查询大于两天前的数据 select * from my_table t where t.created_date > now() - interval '2 day'; --查询大于两天后的数据 select * from my_table t where t.created_date < now() + interval '2 day'; --查询条件为大于某个时刻 select * from my_table t where t.created_date > to_date('2016-08-20 00:00:00','yyyy-mm-dd hh24:mi:ss'); --返回当前描述 select round(extract(epoch from now())); --1506847426
时间切割
oracle
--每五分钟: SELECT * FROM MY_TABLE T WHERE T.DATE_CREATED BETWEEN TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 300 - 1) / 288 AND TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 300) / 288 - 1 / 86400; --每一分钟 SELECT TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 60 - 1) / 1440, TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 60) / 1440 - 1 / 86400 FROM DUAL;
结果如下:
start | end |
---|---|
2017/10/2 11:11:00 | 2017/10/2 11:11:59 |
--每一小时 SELECT TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 3600 - 1) / 24, TRUNC(SYSDATE) + TRUNC(TO_CHAR(SYSDATE, 'sssss') / 3600) / 24 - 1 / 86400 FROM 4000 DUAL;
结果如下:
start | end |
---|---|
2017/10/2 10:00:00 | 2017/10/2 10:59:59 |
mysql
--每一个小时 SELECT DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL FLOOR(TIME_TO_SEC(NOW()) / 3600 - 1) * 3600 SECOND), DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL FLOOR(TIME_TO_SEC(NOW()) / 3600) * 3600 - 1 SECOND);
结果如下:
start | end |
---|---|
2017-10-02 10:00:00 | 2017-10-02 10:59:59 |
--每五分钟 SELECT DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL FLOOR(TIME_TO_SEC(NOW()) / 300 - 1) * 300 SECOND), DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL FLOOR(TIME_TO_SEC(NOW()) / 300) * 300 - 1 SECOND);
结果如下:
start | end |
---|---|
2017-10-02 11:00:00 | 2017-10-02 11:04:59 |
PostgreSQL
--每五分钟(两种方式) SELECT (DATE_TRUNC('hour', NOW()) + (DATE_PART('minute', NOW()) ::INT / 5 - 1) * INTERVAL '5 min'), (DATE_TRUNC('hour', NOW()) + DATE_PART('minute', NOW()) ::INT / 5 * INTERVAL '5 min' - INTERVAL '1 second'); SELECT TIMESTAMP WITH TIME ZONE 'epoch' + ROUND(EXTRACT(EPOCH FROM NOW()) ::INT / 300 - 1) * INTERVAL '300 second', TIMESTAMP WITH TIME ZONE 'epoch' + ROUND(EXTRACT(EPOCH FROM NOW()) ::INT / 300) * INTERVAL '300 second' - INTERVAL '1 second';
结果如下:
start | end |
---|---|
2017-10-02 10:55:00+08 | 2017-10-02 10:59:59+08 |
--每一小时(两种方式) SELECT (DATE_TRUNC('day', NOW()) + (DATE_PART('hour', NOW()) ::INT / 1 - 1) * INTERVAL '1 hour'), (DATE_TRUNC('day', NOW()) + DATE_PART('hour', NOW()) ::INT / 1 * INTERVAL '1 hour' - INTERVAL '1 second'); SELECT TIMESTAMP WITH TIME ZONE 'epoch' + ROUND(EXTRACT(EPOCH FROM NOW()) ::INT / 3600 - 1) * INTERVAL '3600 second', TIMESTAMP WITH TIME ZONE 'epoch' + ROUND(EXTRACT(EPOCH FROM NOW()) ::INT / 3600) * INTERVAL '3600 second' - INTERVAL '1 second';
结果如下:
start | end |
---|---|
2017-10-02 09:00:00+08 | 2017-10-02 09:59:59+08 |
相关文章推荐
- Oracle,SQLServer,Mysql,PostgreSQL数据库查询前10条比较
- Oracle jdbc DB2、Oracle、MySQL、PostgreSQL,并取当前时间。
- hibernate查询时间兼容mysql与Oracle
- ORACLE-DB2-SQLSERVER-MYSQL 数据库 时间转换 查询表结构
- 各种数据库(MYSQL、Oracle、DB2、SQL Server、PostgreSQL)的分页查询语句
- MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间
- 不同数据库中查询前几条记录的用法(SQL Server/MYSQL /Oracle/Postgresql)
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析] (转)
- oracle,mysql,SqlServer三种数据库的分页查询的实例
- mysql常见的时间查询语句
- SQL Server,MySQL,Oracle,PostgreSQL中常用函数用法(1)——日期操作
- Mybatis中oracle、mysql、db2、sql server的like模糊查询
- mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式
- oracle 查询某一个表中数据被锁的时间
- MySql查询某段时间内的数据
- MySQL、SqlServer、Oracle三大主流数据库分页查询
- MySqlhq语句拼接时间查询
- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Ha
- JSP连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYSQL,PostgreSQL)
- oracle_有关表分区_查询