Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于检索Oracle数据库最近12个月数据的SQL查询_Sql_Oracle - Fatal编程技术网

用于检索Oracle数据库最近12个月数据的SQL查询

用于检索Oracle数据库最近12个月数据的SQL查询,sql,oracle,Sql,Oracle,我正在使用Oracle数据库。我有一个名为“TEST”的表,其中日期/时间戳(在我的例子中存储为“Char”)以以下格式存储。现在我想根据今天的日期检索过去12个月的记录。正确的方法是什么 TESTCOLUMN ------------ 2019-06-28-02.01.07.327240 2020-06-28-04.49.12.480240 2020-06-28-05.05.10.681240 我认为您需要使用ADD_MONTHS函数和BETWEEN子句,如下所示: SELECT * FRO

我正在使用Oracle数据库。我有一个名为“
TEST
”的表,其中日期/时间戳(在我的例子中存储为“Char”)以以下格式存储。现在我想根据今天的日期检索过去12个月的记录。正确的方法是什么

TESTCOLUMN
------------
2019-06-28-02.01.07.327240
2020-06-28-04.49.12.480240
2020-06-28-05.05.10.681240

我认为您需要使用
ADD_MONTHS
函数和
BETWEEN
子句,如下所示:

SELECT * FROM YOUR_TABLE
WHERE TO_TIMESTAMP(YOUR_COLUMN,'YYYY-MM-DD HH24.MI.SS.FF') 
      BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP;

我认为您需要使用
ADD_MONTHS
函数和
BETWEEN
子句,如下所示:

SELECT * FROM YOUR_TABLE
WHERE TO_TIMESTAMP(YOUR_COLUMN,'YYYY-MM-DD HH24.MI.SS.FF') 
      BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP;

虽然不建议将值存储在字符串中,但您的格式具有可比性。因此,您可以使用字符串而不是日期/时间戳进行比较。假设您的价值观只存在于过去:

where testcolumn >= to_char(SYSTIMESTAMP, -12), 'YYYY-MM-DD HH24.MI.SS.FF')

这比Tejash的解决方案有优势,因为这可以利用
testcolumn
上的索引(或分区)。仅在“常量”(即系统时间戳)上移动日期操作有助于Oracle optimizer。

虽然不建议将值存储在字符串中,但您的格式具有可比性。因此,您可以使用字符串而不是日期/时间戳进行比较。假设您的价值观只存在于过去:

where testcolumn >= to_char(SYSTIMESTAMP, -12), 'YYYY-MM-DD HH24.MI.SS.FF')

这比Tejash的解决方案有优势,因为这可以利用
testcolumn
上的索引(或分区)。仅在“常量”(即系统时间戳)上移动日期操作有助于Oracle优化器。

谢谢。它就像一个符咒+感谢您的快速回复。谢谢。它就像一个符咒+感谢您的快速响应。