2014-12-29 117 views
-1

以下兩個版本有什麼區別?命令sql oracle

第一件作品,第二件不起作用。

1)

select sum(mont),to_char(datv,'MM') 
from vente v 
group by to_char(datv,'MM'); 

2)

select sum(mont),MONTH(datv) 
from vente v 
group by MONTH(datv); 
+3

月份是不是一個有效的Oracle功能,除非你自己定義。 – tilley31

+0

你是對的。我在答案中發佈的代碼有效,但它應該是TO_NUMBER ...我將進行編輯。 – tilley31

回答

0

正如我在評論說,月是不是一個有效的Oracle功能。這並不阻止你自己定義它:

CREATE OR REPLACE FUNCTION MONTH (p_date IN DATE) return number 
as 
    v_month number(2); 
begin 
    SELECT TO_NUMBER(TO_CHAR(p_date,'MM')) INTO v_month FROM DUAL; 
    return v_month; 
end; 
/

因此,你的第二個查詢應該現在工作。

+0

你爲什麼重新定義現有的功能? – tvCa

+0

Oracle中沒有MONTH功能。您可以使用to_char(v_date,'MM')來檢索月份編號。但是,對於更習慣於SQL Server語法的開發人員來說,MONTH函數存在於此。 – tilley31

+0

OP說甲骨文,不需要改變甲骨文來適應MS,是嗎?如果「開發者」甚至無法輸入正確的函數名稱。 – tvCa