條款我在這一個日期的日期列,但我需要查詢它來查找記錄少於30天。的Oracle SQL如果對一個日期列
START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
查詢:
SELECT START_DATE
WHERE START_DATE < 30;
我知道這是Oracle SQL簡單的查詢,但我做錯了什麼。
條款我在這一個日期的日期列,但我需要查詢它來查找記錄少於30天。的Oracle SQL如果對一個日期列
START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
查詢:
SELECT START_DATE
WHERE START_DATE < 30;
我知道這是Oracle SQL簡單的查詢,但我做錯了什麼。
WHERE START_DATE> SYSDATE - 1
或許
WHERE TRIM(STARTDATE)> TRIM(SYSDATE) - 1
我認爲在Oracle中,添加(或減去)一個數字,日期補充說,許多*天*,所以你只要減去從sysdate中刪除1天。另外,我不確定爲什麼要修剪sysdate。 – FrustratedWithFormsDesigner 2010-11-03 20:05:40
@FrustratedWithFormsDesigner:我認爲他的意思是TRUNC,但是對錶格列運行並不好。 – 2010-11-03 20:07:52
是的,對錯誤1而不是30 :) – maximdim 2010-11-03 20:11:51
用途:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - 30
SYSDATE
是Oracle的語法來獲取當前日期和時間如果您想根據午夜三十天之後評估日期,請使用TRUNC function:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > TRUNC(SYSDATE) - 30
不要在列運行TRUNC - 這將使該列無用的指標,確保了表掃描。
或者,您可以嘗試'where months_between(sysdate,t.start_date)<= 1'。雖然我認爲你可能會得到稍微不同的結果,具體取決於有關月份的長短。 Oracle中存在'months_between',但我不知道其他數據庫是否實現了類似的功能。 – FrustratedWithFormsDesigner 2010-11-03 20:18:24
@FrustratedWithFormsDesigner:沒錯,但加/減一個月不保證滿三十歲天 - IE中減去每月從3月29日... :) – 2010-11-03 20:21:10
真。有時需求會說「3個月之前......」,有時他們會說「90天之前......」,有些人似乎認爲他們是相當的,所以他們說一個時,他們的意思是另一個。於是我的代碼來一個標準才發現他們指的是另一種方式... – FrustratedWithFormsDesigner 2010-11-03 20:26:28
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;
INTERVAL
更加輕便不是假設你可以添加或減去幾天,但我注意到Oracle和PostgreSQL之間的INTERVAL
語法略有差異。
不幸的是,日期處理在數據庫之間不是很方便。 – 2010-11-03 20:07:11
的可能重複甲骨文SQL Where子句中找到最新記錄超過30天(http://stackoverflow.com/questions/3860295/oracle-sql-where-clause-to-find-date-records-older -than-30-days) – APC 2010-11-04 05:28:54