在 SQL Oracle 中筛选时间戳列
filter timestamp column in SQL Oracle
我有一个带有时间戳列的 table,我需要在“2020-08-26”之后进行过滤,但每个解决方案都行不通
RUN_TIME
2020-07-22 04:22:07
2020-07-22 04:34:07
2020-07-22 04:45:07
2020-07-22 04:50:07
2020-07-22 04:55:08
我尝试了以下查询:
WHERE CAST (RUN_DATE AS DATE) >= TO_DATE('2020-08-26', 'yyyy-mm-dd')
WHERE to_date(RUN_DATE, 'YYYY-MM-DD hh24:mi:ss') >= to_date('26-08-2020 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
WHERE RUN_DATE >= TO_TIMESTAMP('26-08-2020 23:59:59')
刚刚:
where run_date >= date '2020-08-26'
这是针对 date
文字的直接过滤。
run_date
已经是 timestamp
,因此您不应尝试转换它。此外,to_timestamp()
接受第二个参数,它指定字符串的格式;没有它,它默认为您的会话(或数据库)的 nls_timestamp_format
,这可能不是您期望的
使用 TIMESTAMP
文字:
SELECT *
FROM table_name
WHERE run_time >= TIMESTAMP '2020-08-27 00:00:00';
或者,使用 DATE
文字:
SELECT *
FROM table_name
WHERE run_time >= DATE '2020-08-27';
或者,将 TO_TIMESTAMP
与格式模型一起使用:
SELECT *
FROM table_name
WHERE run_time >= TO_TIMESTAMP( '2020-08-27', 'YYYY-MM-DD' );
或者,将 TO_DATE
与格式模型一起使用:
SELECT *
FROM table_name
WHERE run_time >= TO_DATE( '2020-08-27', 'YYYY-MM-DD' );
其中示例数据:
CREATE TABLE TABLE_NAME ( run_time TIMESTAMP(6) );
INSERT INTO table_name ( run_time )
SELECT TIMESTAMP '2020-07-22 04:22:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:34:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:45:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:50:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:55:08' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-08-26 23:59:59.999999' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-08-27 00:00:00' FROM DUAL;
全部输出:
| RUN_TIME |
| :------------------------ |
| 27-AUG-20 00.00.00.000000 |
db<>fiddle here
我有一个带有时间戳列的 table,我需要在“2020-08-26”之后进行过滤,但每个解决方案都行不通
RUN_TIME
2020-07-22 04:22:07
2020-07-22 04:34:07
2020-07-22 04:45:07
2020-07-22 04:50:07
2020-07-22 04:55:08
我尝试了以下查询:
WHERE CAST (RUN_DATE AS DATE) >= TO_DATE('2020-08-26', 'yyyy-mm-dd')
WHERE to_date(RUN_DATE, 'YYYY-MM-DD hh24:mi:ss') >= to_date('26-08-2020 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
WHERE RUN_DATE >= TO_TIMESTAMP('26-08-2020 23:59:59')
刚刚:
where run_date >= date '2020-08-26'
这是针对 date
文字的直接过滤。
run_date
已经是 timestamp
,因此您不应尝试转换它。此外,to_timestamp()
接受第二个参数,它指定字符串的格式;没有它,它默认为您的会话(或数据库)的 nls_timestamp_format
,这可能不是您期望的
使用 TIMESTAMP
文字:
SELECT *
FROM table_name
WHERE run_time >= TIMESTAMP '2020-08-27 00:00:00';
或者,使用 DATE
文字:
SELECT *
FROM table_name
WHERE run_time >= DATE '2020-08-27';
或者,将 TO_TIMESTAMP
与格式模型一起使用:
SELECT *
FROM table_name
WHERE run_time >= TO_TIMESTAMP( '2020-08-27', 'YYYY-MM-DD' );
或者,将 TO_DATE
与格式模型一起使用:
SELECT *
FROM table_name
WHERE run_time >= TO_DATE( '2020-08-27', 'YYYY-MM-DD' );
其中示例数据:
CREATE TABLE TABLE_NAME ( run_time TIMESTAMP(6) );
INSERT INTO table_name ( run_time )
SELECT TIMESTAMP '2020-07-22 04:22:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:34:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:45:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:50:07' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-07-22 04:55:08' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-08-26 23:59:59.999999' FROM DUAL UNION ALL
SELECT TIMESTAMP '2020-08-27 00:00:00' FROM DUAL;
全部输出:
| RUN_TIME | | :------------------------ | | 27-AUG-20 00.00.00.000000 |
db<>fiddle here