获取昨天数据的总和

时间:2014-08-26 09:09:18

标签: sql oracle

我有一个关于在oracle sql中获取昨天数据的问题 我的查询是这样的:

SELECT 
   SUM(CURRENT_WEIGHT) 
FROM 
   FABRICATION_HIST 
WHERE 
   FAB_ENTRY_DATE = TO_DATE(SYSDATE-1, 'MM/DD/YYYY')

FAB_ENTRY_DATE中的值是这样的:

2014年8月25日下午3:03:11

当我执行查询时,它没有显示任何数据,请帮助我

5 个答案:

答案 0 :(得分:2)

SELECT 
  SUM(CURRENT_WEIGHT) 
FROM 
  FABRICATION_HIST 
WHERE 
  to_date(FAB_ENTRY_DATE, 'MM/DD/YYYY') = TO_DATE(SYSDATE-1, 'MM/DD/YYYY')

[您应该只匹配日期部分]

SELECT 
  SUM(CURRENT_WEIGHT) 
FROM 
  FABRICATION_HIST 
WHERE
  FAB_ENTRY_DATE >= (SYSDATE - 1) and FAB_ENTRY_DATE < SYSDATE;

答案 1 :(得分:1)

你有平等。 8/25/2014 3:03:11 PM不等于8/25/2014 您需要指定范围:

WHERE FAB_ENTRY_DATE >= TO_DATE(SYSDATE-1, 'MM/DD/YYYY')
      AND FAB_ENTRY_DATE < TO_DATE(SYSDATE, 'MM/DD/YYYY')

答案 2 :(得分:1)

你可以截断数据列:

SELECT 
   SUM(CURRENT_WEIGHT) 
FROM 
   FABRICATION_HIST 
WHERE 
   to_date(FAB_ENTRY_DATE, 'MM/DD/YYYY') = trunc(SYSDATE) - 1

请参阅Oracle's documentation

答案 3 :(得分:1)

试试这个:

SELECT 
   SUM(CURRENT_WEIGHT) 
FROM 
   FABRICATION_HIST 
WHERE 
   TO_CHAR(FAB_ENTRY_DATE, 'MM/DD/YYYY') = TO_CHAR(SYSDATE-1, 'MM/DD/YYYY')

由于您不需要在一个日期范围内(两个日期之间)获得sum,因此您可以将您想要的日期与没有时间部分的varchar进行比较。 "8/25/2014" = "8/25/2014"

答案 4 :(得分:1)

效率更高(如果FAB_ENTRY_DATE有索引 - 使用它):

SELECT SUM(CURRENT_WEIGHT) 
FROM FABRICATION_HIST 
WHERE FAB_ENTRY_DATE >= TRUNC(SYSDATE)-1
  AND FAB_ENTRY_DATE < TRUNC(SYSDATE)

注意:

请勿使用TO_DATE(SYSDATE, 'MM/DD/YYYY')删除时间部分: 因为只有当数据库上的默认日期格式为&#39; MM / DD / YYYY&#39;时才有效,如果没有 - 你会收到如下错误:

  

ORA-01843:不是有效月份:SELECT TO_DATE(SYSDATE,&#39; MM / DD / YYYY&#39;)FROM DUAL