2017-09-13 58 views
1

我想顯示誰在2010下訂單。當我顯示從custorder表「客戶ID」和「訂購日期」一切爲了客戶,格式如下:的Oracle SQL,我的WHERE子句限制特定年份

C-300064 06-DEC-10 

基本上我需要弄清楚如何讓它只顯示客戶ID,其中訂購日期的最後兩位數字是10

有人能幫助我嗎?

+0

添加一些示例表格數據以及預期結果!請格式化文本,而不是圖片。 – jarlh

回答

4

我想誰顯示2010年間下訂單的所有客戶

簡單:

SELECT customerid , orderdate 
FROM your_table 
WHERE orderdate >= DATE '2010-01-01' AND orderdate < DATE '2011-01-01'; 

如果訂購日期爲DATE列,然後它是如何顯示沒有按」沒關係。 DATE 'YYYY-MM-DD'文字不依賴於您的會話NLS_DATE_FORMAT

+0

我確實看到佈局有幾個不同的地方,但不知道是否因爲這個數據庫中的日期格式(06-DEC-10)與你寫的不同(2010-12- 10)。或者我錯了,還是沒關係? – Jaluvshuskies

+0

您可以通過改變它的格式來使用 –

+0

有趣的是,我不知道。泰求救,非常感謝! – Jaluvshuskies

1

由於您使用的是Oracle,因此可以使用。

SELECT 
     customerid 
    , orderdate 
FROM yourtable 
WHERE EXTRACT(YEAR FROM orderdate) = 2010; 
+1

並且有索引使用。有用;它只是它更慢。 – xQbert

+1

太棒了,請提及它會跳過索引,如果該列存在,或者您必須創建函數索引。 – lad2025

+1

夠公平......我糾正了。但是,沒有關於桌子大小的信息。除非他擁有數百萬的顧客,否則他可能不會注意到很多差異。 –

0

如果您使用的是Oracle,您可以通過多種方式來實現這一點使用上的「訂購日期」列中的WHERE子句。但是,使用Oracle SQL時,可能需要一些額外的代碼來說明不同的日期格式。我相信這些例子應該爲你工作:

SELECT t1.customerid, t1.orderdate 
FROM some_table t1 
WHERE t1.orderdate BETWEEN '2017-01-01' AND '2017-12-31'; 

SELECT t1.customerid, t1.orderdate 
FROM some_table t1 
WEHRE t1.orderdate > '2016-12-31' AND t1.orderdate < '2018-01-01'; 

SELECT t1.customerid, t1.orderdate 
FROM some_table t1 
WHERE NOT ('2017-01-01' > t1.orderdate OR '2017-12-31' < t1.orderdate); 

之間的方法需要一點時間來處理,所以我會建議底部的兩個選項(WHERE和WHERE NOT)。

我已經建立了一個小提琴,顯示這三個例子:http://sqlfiddle.com/#!9/38063/1

祝你好運!