我正在使用oracle数据库。我有一张table叫“ TEST 其中日期/时间戳(在我的例子中存储为“char”)以以下格式存储。现在我想根据今天的日期检索过去12个月的记录。正确的方法是什么?
TEST
TESTCOLUMN------------2019-06-28-02.01.07.3272402020-06-28-04.49.12.4802402020-06-28-05.05.10.681240
TESTCOLUMN
------------
2019-06-28-02.01.07.327240
2020-06-28-04.49.12.480240
2020-06-28-05.05.10.681240
u0njafvf1#
我想你需要用 ADD_MONTHS 功能和 BETWEEN 条款如下:
ADD_MONTHS
BETWEEN
SELECT * FROM YOUR_TABLEWHERE TO_TIMESTAMP(YOUR_COLUMN,'YYYY-MM-DD HH24.MI.SS.FF') BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP;
SELECT * FROM YOUR_TABLE
WHERE TO_TIMESTAMP(YOUR_COLUMN,'YYYY-MM-DD HH24.MI.SS.FF')
BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP;
cwxwcias2#
虽然不建议将值存储在字符串中,但您的格式是可比较的。因此可以使用字符串而不是日期/时间戳来进行比较。假设你的价值观只是过去的:
where testcolumn >= to_char(SYSTIMESTAMP, -12), 'YYYY-MM-DD HH24.MI.SS.FF')
这比tejash的解决方案有一个优势,因为它可以利用上的索引(或分区) testcolumn . 仅在“常量”(即系统时间戳)上移动日期操作有助于oracle优化器。
testcolumn
2条答案
按热度按时间u0njafvf1#
我想你需要用
ADD_MONTHS
功能和BETWEEN
条款如下:cwxwcias2#
虽然不建议将值存储在字符串中,但您的格式是可比较的。因此可以使用字符串而不是日期/时间戳来进行比较。假设你的价值观只是过去的:
这比tejash的解决方案有一个优势,因为它可以利用上的索引(或分区)
testcolumn
. 仅在“常量”(即系统时间戳)上移动日期操作有助于oracle优化器。