ORACLE PL/SQL - 使用 SYSDATE 检索特定日期的数据时出现检索问题

Posted

技术标签:

【中文标题】ORACLE PL/SQL - 使用 SYSDATE 检索特定日期的数据时出现检索问题【英文标题】:ORACLE PL/SQL - Retrieval Issue while using SYSDATE to retrieve a data for a Specific Date 【发布时间】:2016-11-29 12:41:38 【问题描述】:

目标:每当我使用 SYSDATE 检索特定日期的数据时,我都没有获得正确的数据。

到目前为止我所做的:我创建了一个包含以下字段的表 销售日期 | sales_Id |姓名 |加载日期

该表包含数千条记录。如果我想查看一周前的销售详情。我正在使用以下查询,

SELECT TRUNC(sales_Date),SUM(sales_ID) 
FROM sales_DB 
WHERE sales_Date 
BETWEEN TRUNC(SYSDATE-7) AND TRUNC(SYSDATE)
GROUP BY TRUNC(sales_Date)

上面的查询在 list 订单中列出一些详细信息(其总和为 _sales_Id_ 7 天)。但, 如果我想检索特定日期的数据(让我考虑 2 天前),

SELECT TRUNC(sales_Date),SUM(sales_ID) 
FROM sales_DB 
WHERE sales_Date 
BETWEEN TRUNC(SYSDATE-2) AND TRUNC(SYSDATE-1)
GROUP BY TRUNC(sales_Date)

上面的查询显示我在查询中提到的特定数据的_sales_Id_总和,除了属于第二天的数据

简而言之,如果我想检索发生在前天的销售详情,一些发生在昨天的数据会重叠 每当我尝试检索它时。

甚至我们也尝试过类似数字格式 '12-OCT-16 12.00.00.000000 AM'和'12-OCT-16 11.59.59.999000 PM,

由于我们使用的是任务调度,我们无法进行手动检索。它必须在 .bat 文件中安排一次。每天都会触发任务。

是否有任何解决方案可以使用 sysdate 避免这些数据重叠。或者是否有任何其他替代方法来检索特定日期的数据。

【问题讨论】:

其中 trunc(sales_date)=trunc(sysdate-1) 试试between TRUNC(SYSDATE-2) and TRUNC(SYSDATE-1) - 1/24/60/60 sales_date 列的数据类型是什么? @Boneist TIMESTAMP 是我们提到的 sales_Date 字段的数据类型。 @Rene = 没有产生正确的结果。这就是我们选择 BETWEEN trunc(sysdate-2) AND trunc(sysdate-1) 的原因 【参考方案1】:

之间是包容性的。改变

WHERE sales_Date 
BETWEEN TRUNC(SYSDATE-2) AND TRUNC(SYSDATE-1)

WHERE sales_Date 
>= TRUNC(SYSDATE-2) and sales_Date < TRUNC(SYSDATE-1)

【讨论】:

我只是要发布这个答案。我总是使用后一种语句,因为它很容易被 BETWEEN 语句所困扰。 感谢您的宝贵时间。我们已经尝试过了,它工作正常。我们非常感谢您的努力。现在我们能够检索到准确的数据而没有任何重叠。

以上是关于ORACLE PL/SQL - 使用 SYSDATE 检索特定日期的数据时出现检索问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle pl/sql 简介

Oracle——PL/SQL

oracle pl/sql基本语法

PL/SQl,oracle 9i,使用sql删除重复行

Oracle_PL/SQL 集合

在 oracle 中使用正则表达式查找 POBOX - PL/SQL