2014-12-29 90 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