2017-09-12 55 views
0

我想從六月份的一個Oracle表中選擇少量數據(2017年6月1日至6月30日)從明天開始(9月13日)。因此我用下面的格式寫了一個查詢,Oracle trunc(Sysdate - 104)和trunc(sysdate - 75)之間的trunc(DateTime)

select * from table where column1='Data1' and Column2='Data2' 
and trunc(DateTime) between trunc(sysdate-104) and trunc(sysdate-75) 

我無法檢查這個查詢,因爲我沒有這個工具。我只是寫在記事本中,想分享給我的朋友。

我的問題 - trunc(DateTime) between trunc(sysdate-104) and trunc(sysdate-75)條件會在6月1日到6月31日之間給出數據還是在那裏有任何語法問題?

回答

0

即使您的公式是時間敏感的,這意味着明天它不會返回相同的結果,但語法本身沒有問題。

相反,去這樣的:

AND TRUNC(DateTime) BETWEEN to_date('2016-06-01','YYYY-MM-DD') 
         AND to_date('2016-06-30','YYYY-MM-DD') 
+0

感謝您的回覆。如果表格日期列有'Jun-01-2017'或其他格式,'2017-06-01'和'2016-06-30'是否會產生一個問題? –

+1

如果該列具有DATE格式,則無關緊要。我會用明確的日期格式來調整我的答案。 – Dessma

+0

@dessma,2016-06-30 23:59:59 ?! –

0

只需將日期格式轉換爲月/年並與之相比較即可。

select * 
from table 
where column1 = 'Data1' 
and column2 = 'Data2' 
and to_char(DateTime, 'MMYYYY') = '062017'; 
+0

感謝您的答覆。如果我運行上面的查詢,我會獲得六月份的完整數據嗎? –

-1

您好我認爲最準確的是:

select * from table where column1='Data1' and Column2='Data2' 
    AND DateTime BETWEEN TRUNC(sysdate-104) 
       AND TRUNC(sysdate-75) 
       + interval '23' hour 
       + interval '59' minute 
       + interval '59' second; 
相關問題