我有一个关于在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
当我执行查询时,它没有显示任何数据,请帮助我
答案 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
答案 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