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 检索特定日期的数据时出现检索问题的主要内容,如果未能解决你的问题,请参考以下文章